Java读取文件方法和给文件追加内容

简介:

1、按字节读取文件内容
2、按字符读取文件内容
3、按行读取文件内容
4、随机读取文件内容

5.找到文件中指定的内容,并保存到一个新文件中(本例子是操作的QQ导出来的群消息)

ReadFromFileUtil.java

复制代码
  1 import java.io.BufferedReader;  
  2 import java.io.File;  
  3 import java.io.FileInputStream;  
  4 import java.io.FileReader;  
  5 import java.io.IOException;  
  6 import java.io.InputStream;  
  7 import java.io.InputStreamReader;  
  8 import java.io.RandomAccessFile;  
  9 import java.io.Reader;  
 10   
 11 public class ReadFromFileUtil {  
 12   
 13     /** 
 14      * @param args 
 15      */  
 16     public static void main(String[] args) {  
 17         String fileName = "D://output.txt";  
 18         readFileByBytes(fileName);  
 19         readFileByChars(fileName);  
 20         readFileByLines(fileName);  
 21         readFileByRandomAccess(fileName);  
 22     }  
 23       
 24     /** 
 25      * 随机读取文件内容 
 26      */  
 27     public static void readFileByRandomAccess(String fileName) {  
 28         RandomAccessFile randomFile = null;  
 29         try {  
 30             System.out.println("随机读取一段文件内容:");  
 31             // 打开一个随机访问文件流,按只读方式  
 32             randomFile = new RandomAccessFile(fileName, "r");  
 33             // 文件长度,字节数  
 34             long fileLength = randomFile.length();  
 35             // 读文件的起始位置  
 36             int beginIndex = (fileLength > 4) ? 0 : 0;  
 37             // 将读文件的开始位置移到beginIndex位置。  
 38             randomFile.seek(beginIndex);  
 39             byte[] bytes = new byte[10];  
 40             int byteread = 0;  
 41             // 一次读10个字节,如果文件内容不足10个字节,则读剩下的字节。  
 42             // 将一次读取的字节数赋给byteread  
 43             while ((byteread = randomFile.read(bytes)) != -1) {  
 44                 System.out.write(bytes, 0, byteread);  
 45             }  
 46         } catch (IOException e) {  
 47             e.printStackTrace();  
 48         } finally {  
 49             if (randomFile != null) {  
 50                 try {  
 51                     randomFile.close();  
 52                 } catch (IOException e1) {  
 53                 }  
 54             }  
 55         }  
 56     }  
 57     /** 
 58      * 以行为单位读取文件,常用于读面向行的格式化文件 
 59      */  
 60     public static void readFileByLines(String fileName) {  
 61         File file = new File(fileName);  
 62         BufferedReader reader = null;  
 63         try {  
 64             System.out.println("以行为单位读取文件内容,一次读一整行:");  
 65             reader = new BufferedReader(new FileReader(file));  
 66             String tempString = null;  
 67             int line = 1;  
 68             // 一次读入一行,直到读入null为文件结束  
 69             while ((tempString = reader.readLine()) != null) {  
 70                 // 显示行号  
 71                 System.out.println("line " + line + ": " + tempString);  
 72                 line++;  
 73             }  
 74             reader.close();  
 75         } catch (IOException e) {  
 76             e.printStackTrace();  
 77         } finally {  
 78             if (reader != null) {  
 79                 try {  
 80                     reader.close();  
 81                 } catch (IOException e1) {  
 82                 }  
 83             }  
 84         }  
 85     }  
 86       
 87     /** 
 88      * 以字符为单位读取文件,常用于读文本,数字等类型的文件 
 89      */  
 90     public static void readFileByChars(String fileName) {  
 91         File file = new File(fileName);  
 92         Reader reader = null;  
 93         try {  
 94             System.out.println("以字符为单位读取文件内容,一次读一个字节:");  
 95             // 一次读一个字符  
 96             reader = new InputStreamReader(new FileInputStream(file));  
 97             int tempchar;  
 98             while ((tempchar = reader.read()) != -1) {  
 99                 // 对于windows下,\r\n这两个字符在一起时,表示一个换行。  
100                 // 但如果这两个字符分开显示时,会换两次行。  
101                 // 因此,屏蔽掉\r,或者屏蔽\n。否则,将会多出很多空行。  
102                 if (((char) tempchar) != '\r') {  
103                     System.out.print((char) tempchar);  
104                 }  
105             }  
106             reader.close();  
107         } catch (Exception e) {  
108             e.printStackTrace();  
109         }  
110         try {  
111             System.out.println("\n以字符为单位读取文件内容,一次读多个字节:");  
112             // 一次读多个字符  
113             char[] tempchars = new char[30];  
114             int charread = 0;  
115             reader = new InputStreamReader(new FileInputStream(fileName));  
116             // 读入多个字符到字符数组中,charread为一次读取字符数  
117             while ((charread = reader.read(tempchars)) != -1) {  
118                 // 同样屏蔽掉\r不显示  
119                 if ((charread == tempchars.length)  
120                         && (tempchars[tempchars.length - 1] != '\r')) {  
121                     System.out.print(tempchars);  
122                 } else {  
123                     for (int i = 0; i < charread; i++) {  
124                         if (tempchars[i] == '\r') {  
125                             continue;  
126                         } else {  
127                             System.out.print(tempchars[i]);  
128                         }  
129                     }  
130                 }  
131             }  
132   
133         } catch (Exception e1) {  
134             e1.printStackTrace();  
135         } finally {  
136             if (reader != null) {  
137                 try {  
138                     reader.close();  
139                 } catch (IOException e1) {  
140                 }  
141             }  
142         }  
143     }  
144     /** 
145      * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。 
146      */  
147     public static void readFileByBytes(String fileName) {  
148         File file = new File(fileName);  
149         InputStream in = null;  
150         try {  
151             System.out.println("以字节为单位读取文件内容,一次读一个字节:");  
152             // 一次读一个字节  
153             in = new FileInputStream(file);  
154             int tempbyte;  
155             while ((tempbyte = in.read())!=-1) {  
156                 System.out.println(tempbyte);  
157             }  
158         } catch (Exception e) {  
159             e.printStackTrace();  
160         }  
161           
162         try {  
163             System.out.println("以字节为单位读取文件内容,一次读多个字节:");  
164             // 一次读多个字节  
165             byte[] tempbytes = new byte[100];  
166             int byteread = 0;  
167             in = new FileInputStream(fileName);  
168             ReadFromFile.showAvailableBytes(in);  
169             // 读入多个字节到字节数组中,byteread为一次读入的字节数  
170             while ((byteread = in.read(tempbytes)) != -1) {  
171                 System.out.write(tempbytes, 0, byteread);//好方法,第一个参数是数组,第二个参数是开始位置,第三个参数是长度  
172             }  
173         } catch (Exception e1) {  
174             e1.printStackTrace();  
175         } finally {  
176             if (in != null) {  
177                 try {  
178                     in.close();  
179                 } catch (IOException e1) {  
180                 }  
181             }  
182         }  
183     }  
184       
185     /** 
186      * 显示输入流中还剩的字节数 
187      */  
188     private static void showAvailableBytes(InputStream in) {  
189         try {  
190             System.out.println("当前字节输入流中的字节数为:" + in.available());  
191         } catch (IOException e) {  
192             e.printStackTrace();  
193         }  
194     }  
195   
196 } 
复制代码

 

 

5.将内容追加到文件尾部

AppendToFileUtil.java

复制代码
 1 import java.io.FileWriter;
 2 import java.io.IOException;
 3 import java.io.RandomAccessFile;
 4 
 5 public class AppendToFileUtil {
 6     /**
 7      * A方法追加文件:使用RandomAccessFile
 8      */
 9     public static void appendMethodA(String fileName, String content) {
10         try {
11             // 打开一个随机访问文件流,按读写方式
12             RandomAccessFile randomFile = new RandomAccessFile(fileName, "rw");
13             // 文件长度,字节数
14             long fileLength = randomFile.length();
15             //将写文件指针移到文件尾。
16             randomFile.seek(fileLength);
17             randomFile.writeBytes(content);
18             randomFile.close();
19         } catch (IOException e) {
20             e.printStackTrace();
21         }
22     }
23 
24     /**
25      * B方法追加文件:使用FileWriter
26      */
27     public static void appendMethodB(String fileName, String content) {
28         try {
29             //打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件
30             FileWriter writer = new FileWriter(fileName, true);
31             writer.write(content);
32             writer.close();
33         } catch (IOException e) {
34             e.printStackTrace();
35         }
36     }
37 
38     public static void main(String[] args) {
39         String fileName = "D:/output.txt";
40         String content = "new append!";
41         //按方法A追加文件  使用RandomAccessFile
42         appendMethodA(fileName, content);
43         appendMethodA(fileName, "append end. \n");
44         //显示文件内容
45         ReadFromFile.readFileByLines(fileName);
46         //按方法B追加文件
47         appendMethodB(fileName, content);
48         appendMethodB(fileName, "append end. \n");
49         //显示文件内容
50         ReadFromFile.readFileByLines(fileName);
51     }
52 }
复制代码

 

6.操作文件,找到特定的内容导出到另一个文件中

复制代码
 1 import java.io.BufferedReader;
 2 import java.io.File;
 3 import java.io.FileNotFoundException;
 4 import java.io.FileReader;
 5 import java.io.FileWriter;
 6 import java.io.IOException;
 7 
 8 public class GroupMessageFileHandle {
 9     public static void main(String[] args) {
10         File sourceFile = new File("C:\\Users\\ABC\\Desktop\\【媒体运营研发部】.txt");
11         File newFile = new File("C:\\Users\\ABC\\Desktop\\刘磊说.txt");
12         readFileByLines(sourceFile,    "刘磊(26563956)", newFile);
13     }
14 
15     /**
16      * 以行为单位读取文件,常用于读面向行的格式化文件
17      */
18     public static void readFileByLines(File sourceFile, String targetName,
19             File newFile) {
20         BufferedReader sourceFileReader = null;
21         BufferedReader newFileReader = null;
22         
23         //校验目标文件
24         if (newFile.exists() && newFile.isFile()) {
25             System.out.println("使用已经存在的newFile.txt文件");
26         } else {
27             try {
28                 // 创建文件
29                 newFile.createNewFile();
30                 System.out.println("创建newFile.txt文件");
31             } catch (IOException e) {
32                 System.out.println("创建newFile.txt文件失败,错误信息:"+ e.getMessage());
33                 return;
34             }
35         }
36         
37         try {
38             System.out.println("以行为单位读取文件内容,一次读一整行:");
39             sourceFileReader = new BufferedReader(new FileReader(sourceFile));
40             String tempString = null;
41             int line = 1;
42 
43             newFileReader = new BufferedReader(new FileReader(newFile));
44             FileWriter fileWriter = new FileWriter(newFile);
45             
46             // 一次读入一行,直到读入null为文件结束            
47             while ((tempString = sourceFileReader.readLine()) != null) {
48                 if (tempString.contains(targetName)) {
49                     // 下面开始向文件中写入数据
50                     try {
51                         if(newFileReader.readLine() != null){
52                             //向文件中追加内容
53                             fileWriter.append(tempString);
54                             fileWriter.append("\n");
55                         }else{//文件第一次写入数据
56                             fileWriter.write(tempString);
57                             fileWriter.append("\n");
58                         }
59                         
60                         
61                         String nextLine = sourceFileReader.readLine();
62                         while(nextLine != null && !nextLine.contains("201")){
63                             fileWriter.append(nextLine);
64                             fileWriter.append("\n");
65                             nextLine = sourceFileReader.readLine();
66                         }
67                         
68                         fileWriter.append("\n");
69                     } catch (FileNotFoundException e) {
70                         System.out.println("找不到文件!错误信息为:" + e.getMessage());
71                     }
72                 }
73                 // 显示行号
74                 line++;
75             }
76             fileWriter.close();
77             sourceFileReader.close();
78             newFileReader.close();
79         } catch (IOException e) {
80             e.printStackTrace();
81         } finally {
82             if (sourceFileReader != null) {
83                 try {
84                     sourceFileReader.close();
85                 } catch (IOException e1) {
86                 }
87             }
88             if (newFileReader != null) {
89                 try {
90                     newFileReader.close();
91                 } catch (IOException e1) {
92                 }
93             }
94         }
95     }
96 }
复制代码

 


本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/5738277.html,如需转载请自行联系原作者

相关文章
|
11天前
|
存储 JSON Java
《从头开始学java,一天一个知识点》之:方法定义与参数传递机制
**你是否也经历过这些崩溃瞬间?** - 看了三天教程,连`i++`和`++i`的区别都说不清 - 面试时被追问&quot;`a==b`和`equals()`的区别&quot;,大脑突然空白 - 写出的代码总是莫名报NPE,却不知道问题出在哪个运算符 🚀 这个系列就是为你打造的Java「速效救心丸」!我们承诺:每天1分钟,地铁通勤、午休间隙即可完成学习;直击痛点,只讲高频考点和实际开发中的「坑位」;拒绝臃肿,没有冗长概念堆砌,每篇都有可运行的代码标本。上篇:《输入与输出:Scanner与System类》 | 下篇剧透:《方法重载与可变参数》。
43 25
|
5天前
|
安全 IDE Java
重学Java基础篇—Java Object类常用方法深度解析
Java中,Object类作为所有类的超类,提供了多个核心方法以支持对象的基本行为。其中,`toString()`用于对象的字符串表示,重写时应包含关键信息;`equals()`与`hashCode()`需成对重写,确保对象等价判断的一致性;`getClass()`用于运行时类型识别;`clone()`实现对象复制,需区分浅拷贝与深拷贝;`wait()/notify()`支持线程协作。此外,`finalize()`已过时,建议使用更安全的资源管理方式。合理运用这些方法,并遵循最佳实践,可提升代码质量与健壮性。
18 1
|
9天前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
19天前
|
运维 Java 程序员
Java中的异常处理方法
本文深入剖析Java异常处理机制,介绍可检查异常、运行时异常和错误的区别与处理方式。通过最佳实践方法,如使用合适的异常类型、声明精确异常、try-with-resources语句块、记录异常信息等,帮助开发者提高代码的可靠性、可读性和可维护性。良好的异常处理能保证程序稳定运行,避免资源泄漏和潜在问题。
|
19天前
|
传感器 监控 Java
Java代码结构解析:类、方法、主函数(1分钟解剖室)
### Java代码结构简介 掌握Java代码结构如同拥有程序世界的建筑蓝图,类、方法和主函数构成“黄金三角”。类是独立的容器,承载成员变量和方法;方法实现特定功能,参数控制输入环境;主函数是程序入口。常见错误包括类名与文件名不匹配、忘记static修饰符和花括号未闭合。通过实战案例学习电商系统、游戏角色控制和物联网设备监控,理解类的作用、方法类型和主函数任务,避免典型错误,逐步提升编程能力。 **脑图速记法**:类如太空站,方法即舱段;main是发射台,static不能换;文件名对仗,括号要成双;参数是坐标,void不返航。
45 5
|
1月前
|
存储 安全 算法
Java容器及其常用方法汇总
Java Collections框架提供了丰富的接口和实现类,用于管理和操作集合数据。
Java容器及其常用方法汇总
|
1月前
|
存储 缓存 Java
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
166 3
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
|
1月前
|
Java API 数据处理
深潜数据海洋:Java文件读写全面解析与实战指南
通过本文的详细解析与实战示例,您可以系统地掌握Java中各种文件读写操作,从基本的读写到高效的NIO操作,再到文件复制、移动和删除。希望这些内容能够帮助您在实际项目中处理文件数据,提高开发效率和代码质量。
31 4
|
1月前
|
存储 算法 Java
解锁“分享文件”高效密码:探秘 Java 二叉搜索树算法
在信息爆炸的时代,文件分享至关重要。二叉搜索树(BST)以其高效的查找性能,为文件分享优化提供了新路径。本文聚焦Java环境下BST的应用,介绍其基础结构、实现示例及进阶优化。BST通过有序节点快速定位文件,结合自平衡树、多线程和权限管理,大幅提升文件分享效率与安全性。代码示例展示了文件插入与查找的基本操作,适用于大规模并发场景,确保分享过程流畅高效。掌握BST算法,助力文件分享创新发展。
|
1月前
|
Java API
java.time常用方法汇总
`java.time` API 是从 Java 8 开始引入的时间日期处理库,旨在替代老旧的 `java.util.Date` 和 `Calendar`。它提供了更简洁、强大和灵活的方式处理日期、时间、时区及时间间隔,支持全球化和时间计算需求。API 包含获取当前时间、创建指定时间、解析和格式化字符串、进行加减运算、比较时间、获取年月日时分秒、计算时间间隔、时区转换以及判断闰年等功能。示例代码展示了如何使用这些功能,极大简化了开发中的时间处理任务。