Java中对文件的读写操作

像我们经常会遇到这样的事情,例如一个txt文件中有姓名和电话,这个时候很经常就需要将名字和电话号码进行提取操作,这个时候就可以利用Java中io来实现了。

这里我就不具体介绍io中的字节流和字符流的异同点了,有兴趣的同学可以自己百度百度。

今天主要是介绍一下如何实现对文件内容的获取还有就是对获取的文件内容进行修改操作。下面看具体案例介绍。

这个是案例最终要实现的效果,在姓名和电话号码直接添加分割符号。

这里有一点需要主要的是,这个案例并不是直接在原先的txt文档上面进行修改的,而是新建一个新的txt文件重新写入新的内容。

好了废话不多说,看看这个案例具体是怎么具体实现的。

这个案例分为三个模块:1.文件读取模块,2.姓名电话分离模块,3.文件写入模块

1.文件读取模块:

 /**
     * 功能:Java读取txt文件的内容
     * 步骤:1:先获得文件句柄
     * 2:获得文件句柄当做是输入一个字节码流,需要对这个输入流进行读取
     * 3:读取到输入流后,需要读取生成字节流
     * 4:一行一行的输出。readline()。
     * 备注:需要考虑的是异常情况
     * @param filePath
     */
	public static String readTxtFile(String filePath) {
		StringBuilder content = new StringBuilder("");
		try {
			String encoding = "UTF-8";
			File file = new File(filePath);
			if (file.isFile() && file.exists()) {
				InputStreamReader read = new InputStreamReader(new FileInputStream(file), encoding);
				BufferedReader bufferedReader = new BufferedReader(read);
				String lineTxt = null;
				while ((lineTxt = bufferedReader.readLine()) != null) {
					String[] result = getNamePhone(lineTxt);
					System.out.println(lineTxt);
					content.append(result[0] + "----" + result[1]);
					content.append("\r\n");// txt换行
				}
				read.close();
			} else {
				System.out.println("找不到指定的文件");
			}
		} catch (Exception e) {
			System.out.println("读取文件内容出错");
			e.printStackTrace();
		}
		return content.toString();
	}

2.姓名电话分离模块:

public static String[] getNamePhone(String str) {
		String[] result = new String[2];
		int index = 0;
		for (int i = 0; i < str.length(); i++) {
			if (str.charAt(i) >= '0' && str.charAt(i) <= '9') {
				index = i;
				break;
			}
		}
		result[0] = str.substring(0, index);
		result[1] = str.substring(index);
		return result;
	}

3.文件写入模块:

public static void printFile(String content) {
		BufferedWriter bw = null;
		try {
			File file = new File("D:/filename.txt");
			if (!file.exists()) {
				file.createNewFile();
			}
			FileWriter fw = new FileWriter(file.getAbsoluteFile());
			bw = new BufferedWriter(fw);
			bw.write(content);
			bw.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

通过这三个模块就可以实现对文件的读取操作了,然后对信息进行处理,最后将处理好的信息添加到新的文件中去。

这里需要注意的是:项目的编码格式要写成utf-8,否则会出现乱码的情况。

到这里文件的读写操作就完结了,是不是特别简单方便。

如果对上面的内容还有什么疑义或者问题都可以加我QQ:208017534咨询。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IMWeb前端团队

通过ffi在node.js中调用动态链接库(.so/.dll文件)

? 概述 为什么要在node.js中调用动态链接库 由于腾讯体系下的许多公共的后台服务(L5, CKV, msgQ等)已经有了非常成熟的C/C++编写的API...

4187
来自专栏Java3y

【不用框架】文件上传和下载

什么是文件上传? 文件上传就是把用户的信息保存起来。 为什么需要文件上传? 在用户注册的时候,可能需要用户提交照片。那么这张照片就应该要进行保存。 上传组件(工...

5234
来自专栏信安之路

【作者投稿】宽字符注入详解与实战

SQL语句是SELECT * FROM news WHERE tid='{$id}',根据文章的id把文章从news表中提取出来,在$sql之前,我们只用了限制...

960
来自专栏有趣的django

SQLAlchemy SQLAlchemy

3290
来自专栏绿巨人专栏

Scala on Visual Studio Code

3758
来自专栏JAVA后端开发

通用数据级别权限的框架设计与实现(3)-数据列表的权限过滤

查看上篇文章通用数据级别权限的框架设计与实现(2)-数据权限的准备工作,我们开始数据列表的权限过滤. 原理:我们在做过滤列表时,根据用户权限自动注入到相关SQ...

6445
来自专栏好好学java的技术栈

java后端开发每天遇到的jsp,了解一下

JSP脚本片断(scriptlet)用于在JSP页面中编写多行Java代码(在<%%>不能定义方法)。语法:<%多行java代码 %>

1552
来自专栏cnblogs

knockoutjs 上自己实现的flux

在knockoutjs 上实现 Flux 单向数据流 状态机,主要解决多个组件之间对数据的耦合问题。 一、其实简单 flux的设计理念和实现方案,很大程度上人借...

2088
来自专栏大内老A

ASP.NET MVC Model元数据及其定制:一个重要的接口IMetadataAware

在介绍用于自定义Model元数据属性的AdditionalMetadataAttribute特性时我们提到了它实现的接口IMedataAware,我们说这是一个...

1926
来自专栏Zephery

Spring项目路径

Spring源码——WebUtils 个人网站中部署的服务器共有两台,由于是分布式的环境,为了防止有效的针对具体某个服务器出现的问题,需要在网页上加上服务器的I...

3614

扫码关注云+社区