Java,关闭FileWriter更改文件MD5值
我需要创建一个MD5文件后,创建了一些内容的文件 但是我发现一个问题,文件的md5值与实际文件值不同,尽管我没有更改文件本身 最后我发现,如果我在try-with-resources块中创建md5文件,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
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中测试了它,其值仍然不同。