Я думаю, вам нужно установить контрольную сумму для хэша md5 содержимого файла , а не хеша path-name .
Почему они (Google) заботятся о пути?Это не имеет никакого смысла.Простите, если я неверно истолковал ваш код, но я думаю, что вы неправильно поняли концепцию контрольных сумм файлов.
В любом случае, вам нужно съесть (переварить) файл, а не путь:
import java.security.*;
import java.util.*;
import java.math.*;
import java.io.*;
public class MD5 {
private MessageDigest mDigest;
private File openFile;
private FileInputStream ofis;
private int fSize;
private byte[] fBytes;
public MD5(String filePath) {
try { mDigest = MessageDigest.getInstance("MD5"); }
catch (NoSuchAlgorithmException e) { System.exit(1); }
openFile = new File(filePath);
}
public String toString() {
try {
ofis = new FileInputStream(openFile);
fSize = ofis.available();
fBytes = new byte[fSize];
ofis.read(fBytes);
} catch (Throwable t) {
return "Can't read file or something";
}
mDigest.update(fBytes);
return new BigInteger(1, mDigest.digest()).toString(16);
}
public static void main(String[] argv){
MD5 md5 = new MD5("someFile.ext");
System.out.println(md5);
}
}
Итак, ошибка в приведенном выше фрагменте приведена здесь:
messageDigest.update(String.valueOf(file.hashCode()).getBytes());
Теперь я могу показать, что мой класс дает правильную сумму md5 файла , которая, скорее всего, вам нужна.Просто прочитайте javadoc метода, если вы мне не доверяете: http://gdata -java-client.googlecode.com / svn / trunk / java / src / com / google / gdata / data / docs / DocumentListEntry.java Что он говорит: * Установите контрольную сумму MD5, рассчитанную для документа.... ничего о контрольной сумме пути :)
здесь:
$ echo "Two dogs are sleeping on my couch" > someFile.ext
$ echo "Two dogs are sleeping on my couch" |md5sum
1d81559b611e0079bf6c16a2c09bd994 -
$ md5sum someFile.ext
1d81559b611e0079bf6c16a2c09bd994 someFile.ext
$ javac MD5.java && java MD5
1d81559b611e0079bf6c16a2c09bd994