我们在代码中生成一些文件。有时文件会与我们之前生成的文件一起co。一个问题是:我们如何检查文件是否相同并跳过写入?
我看到的唯一方法是:
答案 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)
据我所知,哈希是查找修改/更新的最佳方式。或者,如果有更新时有明确的行或字符更改,则可以检查生成的新文件的更改,并决定是否要继续执行写入操作。在编写文件时,您始终可以引入类似计数器的参数,但更新计数器将需要一些与写入前所做更改相关的逻辑。这个问题的答案取决于应用程序的上下文和工作。