Java,Close FileWriter更改文件MD5值

时间:2017-09-27 02:01:31

标签: java

创建包含一些内容的文件后,我需要创建一个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?

1 个答案:

答案 0 :(得分:0)

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