Java按行读写文件示例代码
最近需要按行处理文本,筛选一些目标行内容,但是发现自己除了CRUD的套路代码外,连最基本的读写文件的代码都不会写,深以为耻,特地研究一下,以供后续使用
1.问题情景
测试文件是一个名为 text.txt 伪sql文件,需要提取到某个以
### INSERT INTO `recycle_energy_report`.`major_project_milestone
开头的包含其在内的七行内容,如下:
### INSERT INTO `recycle_energy_report`.`major_project_milestone` ### SET ### @1=8423 ### @2='2538' ### @3='主体工程开工' ### @4='2023-11' ### @5=NULL
以下是我经过研究后写出的代码,将匹配的目标行写到另一个文件中result.txt中。
public class FileReaderWriter { public static void main(String[] args) { try { FileReader fileReader = new FileReader("C:/Users/Administrator/Desktop/text.txt"); BufferedReader br = new BufferedReader(fileReader); FileWriter fileWriter = new FileWriter("C:/Users/Administrator/Desktop/result.txt"); BufferedWriter bw = new BufferedWriter(fileWriter); String line; while ((line = br.readLine()) != null) { if (line.startsWith("### INSERT INTO `recycle_energy_report`.`major_project_milestone`")) { System.out.println(line); bw.write(line + "\n"); // System.out.println(br.readLine()); bw.write(br.readLine() + "\n"); // System.out.println(br.readLine()); bw.write(br.readLine() + "\n"); // System.out.println(br.readLine()); bw.write(br.readLine() + "\n"); // System.out.println(br.readLine()); bw.write(br.readLine() + "\n"); // System.out.println(br.readLine()); bw.write(br.readLine() + "\n"); // System.out.println(br.readLine()); bw.write(br.readLine() + "\n"); } } bw.close(); fileWriter.close(); br.close(); fileReader.close(); } catch (IOException e) { e.printStackTrace(); } } }
2.读文件的其他方法
参考
总结几个其他常用的方法,将每行内容存放到List中:
public class FileReadLineUtil { public static void main(String[] args) { // close方法会强制调用flush方法,因此不需要写file.flush try { //***** 1.BufferedReader类中的lines() BufferedReader br = new BufferedReader(new FileReader("C:/Users/Administrator/Desktop/result.txt")); // list of lines List<String> list = new ArrayList<>(); // convert stream into list list = br.lines().collect(Collectors.toList()); // print all lines list.forEach(System.out::println); // long count = list.stream().filter(a -> a.startsWith("### INSERT INTO `recycle_energy_report`.`major_project_milestone`")) // .count(); // System.out.println(count); // close the reader br.close(); //***** 2. stream // initialize lines stream Stream<String> stream = Files.lines(Paths.get("C:/Users/Administrator/Desktop/result.txt")); // read lines stream.forEach(System.out::println); // close the stream stream.close(); // ***** 3. NIO // read all lines List<String> lines = Files.readAllLines(Paths.get("C:/Users/Administrator/Desktop/result.txt")); // print all lines lines.forEach(System.out::println); } catch (IOException e) { e.printStackTrace(); } } }
更多的读写文件的代码可以参考java-read-write-text-files 。
本文作者:又一个蛇佬腔
本文链接:https://www.cnblogs.com/it-bt/p/17020635.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
分类:
标签:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构