📂Java
2023-01-02 21:56阅读: 408评论: 0推荐: 0

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 中国大陆许可协议进行许可。

posted @   又一个蛇佬腔  阅读(408)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开