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

posted @ 2023-01-02 21:56  又一个蛇佬腔  阅读(406)  评论(0编辑  收藏  举报