Java,关闭FileWriter更改文件MD5值

Java,关闭FileWriter更改文件MD5值,java,Java,我需要创建一个MD5文件后,创建了一些内容的文件 但是我发现一个问题,文件的md5值与实际文件值不同,尽管我没有更改文件本身 最后我发现,如果我在try-with-resources块中创建md5文件,md5就会改变。我写了下面的代码片段来验证我的猜测 public static void main(String[] args) throws IOException { String filePath = "D:\\push\\file\\imei2device\\imei2device

我需要创建一个MD5文件后,创建了一些内容的文件

但是我发现一个问题,文件的md5值与实际文件值不同,尽管我没有更改文件本身

最后我发现,如果我在try-with-resources块中创建md5文件,md5就会改变。我写了下面的代码片段来验证我的猜测

public static void main(String[] args) throws IOException {
    String filePath = "D:\\push\\file\\imei2device\\imei2device.txt";
    File f = new File(filePath);
    try (FileWriter fw = new FileWriter(f);){
        fw.write("something");
        //createMD5File(filePath);// create here, NOT OK!

    }
    catch (Exception ex) {
        ex.printStackTrace();
    }
    createMD5File(filePath);// create here, ok
    logger.info("create md5 file successfully, notModified: {}", MappedFileReader.isFileNotModified(filePath));
}
当我将
createMD5File
放在两个不同的位置时,我会发现MD5值不同


我怀疑当FileWriter关闭时,文件本身是不同的,比如EOF?

否。磁盘上没有明确的EOF,您需要等待文件完成写入,然后再尝试使用文件内容计算MD5(即
flush()
计算总和之前的文件)。或者,根据从内存写入的内容计算哈希值(比从磁盘重新读取数据快)。

否。磁盘上没有明确的EOF,您需要等待文件完成写入,然后再尝试使用文件内容计算MD5(即
flush()
计算总和之前的文件)。或者,根据从内存写入的内容计算哈希值(比从磁盘重新读取数据更快)。

谢谢!我还有一个问题,我在读取文件时试图计算MD5,但我发现该值与lib返回的值不同,是的,输入中的单个字节差异很可能产生完全不同的输出。Windows行分隔符是“\r\n”(不是“\n”)。但我在linux中测试了它,其值仍然不同。谢谢!我还有一个问题,我在读取文件时试图计算MD5,但我发现该值与lib返回的值不同,是的,输入中的单个字节差异很可能产生完全不同的输出。Windows行分隔符是“\r\n”(不是“\n”)。但我在linux中测试了它,其值仍然不同。