今天帮老妈把旧手机的便签内容拷贝到新手机

但是旧手机没有批量发送功能

于是自己写了个简单的读取功能进行操作

操作过程发现文件输出总是不全

最后找到问题是

BufferedWriter写文件时没有调用flush()方法。在Java中,BufferedWriter是一个缓冲的字符输出流,它会将一部分数据积累在缓冲区中,直到缓冲区满或调用其flush()方法后才会将数据真正写入文件。

换句话说,如果你的程序没有在循环结束后手动调用bufferedWriter.flush()方法,缓冲区中可能会残留一部分未写入文件的数据。为了解决这个问题,可以在循环结束后添加一行bufferedWriter.flush()代码,强制将缓冲区的所有数据都写入文件:

javaCopy Code
....
while ((line = bufferedReader.readLine()) != null) {
    ....
}
bufferedWriter.flush(); // 强制将缓冲区的所有数据写入文件
System.out.println("文件读取完毕。");
....

下面是全部代码

package com.pjk.demo;

import lombok.extern.slf4j.Slf4j;

import java.io.*;
import java.util.HashMap;

/**
 * @author: PJK
 * @date: 2023-10-03=======>21:08
 * 解析标签
 */
@Slf4j
public class ParseNote {
    public static void main(String[] args) {
//        定义文件路径
        String filePath = "C:\\Users\\PJK\\Desktop\\test.txt";
        String targetPath = "C:\\Users\\PJK\\Desktop\\note.txt";
//        按行读取文件内容
        try {
            BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath));
            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(targetPath));
//            定义一个接受文件的字符
            String line;
            int i=0;
            while ((line = bufferedReader.readLine()) != null) {
                i++;
                log.info("开始读取文件内容:本次读取第{}行",i);
//            以逗号为分隔符 将内容存储到
                String[] lineDatas = line.split(",");
                HashMap<String, String> map = new HashMap<>();
                for (String lineData : lineDatas) {
                    String[] keyValue = lineData.split(":");
                    if (keyValue.length == 2) {
                        String key = keyValue[0].replaceAll("\"", "");
                        String value = keyValue[1].replaceAll("\"", "");
                        map.put(key, value);
                    }
                }
                String noteDate=map.get("date")+"======>"+map.get("content_no_tag");
                log.info("第{}行输出的内容为:{}",i,noteDate);
                bufferedWriter.write(noteDate);
                bufferedWriter.newLine();
            }
            bufferedWriter.flush();
            System.out.println("文件读取完毕。");
        } catch (FileNotFoundException e) {
            log.info("文件读取异常。");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}