Java:在重写文件之前检查文件是否需要更新的最佳方法是什么?

时间:2015-09-04 17:21:03

标签: java file hash

我们在代码中生成一些文件。有时文件会与我们之前生成的文件一起co。一个问题是:我们如何检查文件是否相同并跳过写入?

我看到的唯一方法是:

  • 读取字符串中保存的文件并生成其哈希值
  • 生成我们要保存到新文件中的字符串哈希
  • 比较哈希
可能有更好的方法吗?

3 个答案:

答案 0 :(得分:1)

MD5 Check Sum是最简单的方法。我认为你的方法是有效的。

示例I在单元测试中使用:

/** Returns a MD5 checksum from a file
 * 
 * @param filename file name to write
 * @return String
 * @throws Exception
 */
private static String createChecksumForFile(String filename) throws Exception
    {
  InputStream fis =  new FileInputStream(filename);

  byte[] buffer = new byte[1024];
  MessageDigest complete = MessageDigest.getInstance("MD5");
  int numRead;
  do {
    numRead = fis.read(buffer);
    if (numRead > 0) {
      complete.update(buffer, 0, numRead);
    }
  } while (numRead != -1);

  fis.close();

  byte[] b = complete.digest();
  String result = "";
  for (byte aB : b) {
     result +=
             Integer.toString((aB & 0xff) + 0x100, 16).substring(1);
  }
  return result;
} 

答案 1 :(得分:1)

除非有任何简单的方法来确定数据是否仍然处于最新状态,否则使用现有数据覆盖它会更有效率,因为读取和散列完整文件很可能比简单地覆盖数据更慢。虽然这在很大程度上取决于文件大小。

答案 2 :(得分:1)

据我所知,哈希是查找修改/更新的最佳方式。或者,如果有更新时有明确的行或字符更改,则可以检查生成的新文件的更改,并决定是否要继续执行写入操作。在编写文件时,您始终可以引入类似计数器的参数,但更新计数器将需要一些与写入前所做更改相关的逻辑。这个问题的答案取决于应用程序的上下文和工作。