【发布时间】:2015-08-18 16:01:58
【问题描述】:
我创建了一个场景,例如签入和签出文档。然后如何管理和检查用户签入文档是新签入还是现有文档签入。我们可以根据哪些文件属性来区分这一点。我不想使用文件的 lastModifiedTime、Size 或名称。请告诉我。谢谢..
【问题讨论】:
-
为什么不对文件内容进行hash,这就是Git等版本控制系统采用的方法
标签: java
我创建了一个场景,例如签入和签出文档。然后如何管理和检查用户签入文档是新签入还是现有文档签入。我们可以根据哪些文件属性来区分这一点。我不想使用文件的 lastModifiedTime、Size 或名称。请告诉我。谢谢..
【问题讨论】:
标签: java
当我有这样的事情要做时,我尝试使用 MD5 哈希(在 perl 中)。我认为这可能会有所帮助: How can I generate an MD5 hash?
【讨论】:
md5 文件编码将帮助您解决此问题。 This is 一个如何获取 MD5 值的工作示例。
public static void main(String[] args)throws Exception
{
MessageDigest md = MessageDigest.getInstance("MD5");
FileInputStream fis = new FileInputStream("c:\\loging.log");
byte[] dataBytes = new byte[1024];
int nread = 0;
while ((nread = fis.read(dataBytes)) != -1) {
md.update(dataBytes, 0, nread);
};
byte[] mdbytes = md.digest();
//convert the byte to hex format method 1
StringBuffer sb = new StringBuffer();
for (int i = 0; i < mdbytes.length; i++) {
sb.append(Integer.toString((mdbytes[i] & 0xff) + 0x100, 16).substring(1));
}
System.out.println("Digest(in hex format):: " + sb.toString());
//convert the byte to hex format method 2
StringBuffer hexString = new StringBuffer();
for (int i=0;i<mdbytes.length;i++) {
String hex=Integer.toHexString(0xff & mdbytes[i]);
if(hex.length()==1) hexString.append('0');
hexString.append(hex);
}
System.out.println("Digest(in hex format):: " + hexString.toString());
}
输出:
Digest(in hex format):: e72c504dc16c8fcd2fe8c74bb492affa
Digest(in hex format):: e72c504dc16c8fcd2fe8c74bb492affa
你要做的就是将旧的 MD5 值与新的值进行比较,如果一致,则文件没有进行任何更改
【讨论】: