如何在修改内容后将一个文件与同一文件区分开来,以便在Java

时间:2015-08-18 07:27:52

标签: java

我有一个像checkin&签出文件。然后,如果用户签入文档,是新签入还是现有签入文档,如何管理和检查。在什么文件属性我们可以区分这个。我不想使用lastModifiedTime,Size或文件名。请告诉我。感谢..

2 个答案:

答案 0 :(得分:1)

当我有这样的事情要做时,我尝试使用MD5哈希(在perl中)。我认为这可能会有所帮助: How can I generate an MD5 hash?

答案 1 :(得分:0)

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值与新MD5值进行比较,如果它对应,则不对文件进行任何更改