创建包含一些内容的文件后,我需要创建一个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?
答案 0 :(得分:0)
没有。磁盘上没有明确的EOF,在尝试使用文件内容(在计算总和之前flush()
文件)计算MD5之前,需要等待文件完成写入。或者,根据您从内存中写入的内容计算哈希值(它会更快,然后从磁盘重新读取数据)。