Java那些事之文件操作
今天简单介绍一下java中文件的读写操作。
读写文件是开发过程中最常见的技术了,虽然简单,但其中还是有很多细节需要注意的。比如写文件前要验证文件夹或文件是否存在,读写文件时编码格式的指定,以及读文件时以行为单位读取还是以字节为单位等等。
废话不多说,下面附上代码和注释,希望对大家有所帮助.

1 public ArrayList<String> ReadFileData(String fileName,ArrayList<String> strList) {
2 // TODO Auto-generated method stub
3 CheckMethods.PrintDebugMessage("-------开始处理文件:"+fileName+"-------");
4 File file = new File(fileName);
5 BufferedReader reader = null;
6 try {
7 CheckMethods.PrintDebugMessage("以行为单位读取文件内容,一次读一整行:");
8 reader = new BufferedReader(new FileReader(file));
9 String tempString = null;
10 int line = 0;
11
12 // 一次读入一行,直到读入null为文件结束
13 while ((tempString = reader.readLine()) != null) {
14 // 显示行号
15 line++;
16 CheckMethods.PrintDebugMessage("line " + line + ": " + tempString);
17 if(!tempString.equalsIgnoreCase(""))
18 strList.add(StringHelper.TrimString(tempString));
19 }
20 reader.close();
21 return strList;
22 }
23 catch (IOException e)
24 {
25 e.printStackTrace();
26 CheckMethods.PrintInfoMessage("读取配置文件:"+fileName+"出现错误");
27
28 }
29 return null;
30 }
2 // TODO Auto-generated method stub
3 CheckMethods.PrintDebugMessage("-------开始处理文件:"+fileName+"-------");
4 File file = new File(fileName);
5 BufferedReader reader = null;
6 try {
7 CheckMethods.PrintDebugMessage("以行为单位读取文件内容,一次读一整行:");
8 reader = new BufferedReader(new FileReader(file));
9 String tempString = null;
10 int line = 0;
11
12 // 一次读入一行,直到读入null为文件结束
13 while ((tempString = reader.readLine()) != null) {
14 // 显示行号
15 line++;
16 CheckMethods.PrintDebugMessage("line " + line + ": " + tempString);
17 if(!tempString.equalsIgnoreCase(""))
18 strList.add(StringHelper.TrimString(tempString));
19 }
20 reader.close();
21 return strList;
22 }
23 catch (IOException e)
24 {
25 e.printStackTrace();
26 CheckMethods.PrintInfoMessage("读取配置文件:"+fileName+"出现错误");
27
28 }
29 return null;
30 }

1 public String readDataFromFile(String fileName,String code)
2 {
3 CheckMethods.PrintDebugMessage("-------开始处理磁盘网页文件:"+fileName+"-------");
4 StringBuilder sb = new StringBuilder();
5 File file = new File(fileName);
6 if(!file.exists())
7 {
8
9 return "";
10 }
11 Reader reader = null;
12 try {
13 CheckMethods.PrintDebugMessage("以字符为单位读取文件内容,一次读一个字节:");
14 // 一次读一个字符
15 reader = new InputStreamReader(new FileInputStream(file),code);
16 int tempchar;
17 while ((tempchar = reader.read()) != -1) {
18 // 对于windows下,\r\n这两个字符在一起时,表示一个换行。
19 // 但如果这两个字符分开显示时,会换两次行。
20 // 因此,屏蔽掉\r,或者屏蔽\n。否则,将会多出很多空行。
21 if (((char) tempchar) != '\r') {
22 sb.append((char) tempchar);
23 }
24 }
25 reader.close();
26
27 return sb.toString();
28 } catch (Exception e) {
29 e.printStackTrace();
30
31 CheckMethods.PrintInfoMessage("读取文件:"+fileName+"出现错误");
32 }
33 return "";
34 }
2 {
3 CheckMethods.PrintDebugMessage("-------开始处理磁盘网页文件:"+fileName+"-------");
4 StringBuilder sb = new StringBuilder();
5 File file = new File(fileName);
6 if(!file.exists())
7 {
8
9 return "";
10 }
11 Reader reader = null;
12 try {
13 CheckMethods.PrintDebugMessage("以字符为单位读取文件内容,一次读一个字节:");
14 // 一次读一个字符
15 reader = new InputStreamReader(new FileInputStream(file),code);
16 int tempchar;
17 while ((tempchar = reader.read()) != -1) {
18 // 对于windows下,\r\n这两个字符在一起时,表示一个换行。
19 // 但如果这两个字符分开显示时,会换两次行。
20 // 因此,屏蔽掉\r,或者屏蔽\n。否则,将会多出很多空行。
21 if (((char) tempchar) != '\r') {
22 sb.append((char) tempchar);
23 }
24 }
25 reader.close();
26
27 return sb.toString();
28 } catch (Exception e) {
29 e.printStackTrace();
30
31 CheckMethods.PrintInfoMessage("读取文件:"+fileName+"出现错误");
32 }
33 return "";
34 }

1 public void writeDataToFile(String fileDic,String fileName,String content,String charSet) {
2 // TODO Auto-generated method stub
3 if(content.equalsIgnoreCase(""))
4 return;
5 File file = null;
6 try
7 {
8 //确保目录和文件存在,不存在则创建
9 File fileDiction = new File(fileDic);
10 if(!fileDiction.exists())
11 fileDiction.mkdirs();
12 file = new File(fileDic+fileName);
13 if(!file.exists())
14 file.createNewFile();
15 }
16 catch(Exception e)
17 {
18 CheckMethods.PrintInfoMessage(e.getMessage());
19 CheckMethods.PrintInfoMessage("创建文件:"+fileDic+fileName+"出现错误");
20
21 }
22
23 OutputStreamWriter write = null;
24 try {
25 //需要注意指定编码格式
26 write = new OutputStreamWriter(new FileOutputStream(file),charSet);
27 BufferedWriter writer = new BufferedWriter(write);
28 writer.write(content);
29 writer.close();
30 }
31 catch (IOException e) {
32 // TODO Auto-generated catch block
33 e.printStackTrace();
34 CheckMethods.PrintInfoMessage("写入文件:"+fileDic+fileName+"出现错误");
35
36 }
37 }
2 // TODO Auto-generated method stub
3 if(content.equalsIgnoreCase(""))
4 return;
5 File file = null;
6 try
7 {
8 //确保目录和文件存在,不存在则创建
9 File fileDiction = new File(fileDic);
10 if(!fileDiction.exists())
11 fileDiction.mkdirs();
12 file = new File(fileDic+fileName);
13 if(!file.exists())
14 file.createNewFile();
15 }
16 catch(Exception e)
17 {
18 CheckMethods.PrintInfoMessage(e.getMessage());
19 CheckMethods.PrintInfoMessage("创建文件:"+fileDic+fileName+"出现错误");
20
21 }
22
23 OutputStreamWriter write = null;
24 try {
25 //需要注意指定编码格式
26 write = new OutputStreamWriter(new FileOutputStream(file),charSet);
27 BufferedWriter writer = new BufferedWriter(write);
28 writer.write(content);
29 writer.close();
30 }
31 catch (IOException e) {
32 // TODO Auto-generated catch block
33 e.printStackTrace();
34 CheckMethods.PrintInfoMessage("写入文件:"+fileDic+fileName+"出现错误");
35
36 }
37 }
今天就到这里, 有什么不妥的地方,欢迎大家留言指正~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架