我正在尝试为文件夹中的某些文件开发文件更新程序,以使用客户端上的Java和服务器端上的PHP将FTP服务器与本地文件夹同步。
在服务器端,我正在计算文件的md5_file($filename)
并将它们中的每个返回给JSON。
在Java上,我首先检查文件是否在本地文件夹中。如果该文件存在,那么我将检查MD5校验和,以查看该文件是否与在线文件完全相同。
检查.txt或.lua文件时,MD5不匹配。检查其他文件类型(如.dds纹理文件)也可以。
我在Java上使用的MD5是这样的:
private String md5(File f) throws FileNotFoundException, NoSuchAlgorithmException {
MessageDigest digest = MessageDigest.getInstance("MD5");
InputStream is = new FileInputStream(f);
byte[] buffer = new byte[8192];
int read = 0;
try {
while( (read = is.read(buffer)) > 0) {
digest.update(buffer, 0, read);
}
byte[] md5sum = digest.digest();
BigInteger bigInt = new BigInteger(1, md5sum);
String output = bigInt.toString(16);
return output;
}
catch(IOException e) {
throw new RuntimeException("Unable to process file for MD5", e);
}
finally {
try {
is.close();
}
catch(IOException e) {
throw new RuntimeException("Unable to close input stream for MD5 calculation", e);
}
}
}
例如,对于一个description.lua文件,其内容如下:
livery = {
{"KC-130_fusel", 0 ,"KC-130_map_fus",false};
{"KC-130_wing", 0 ,"KC-130_map_wingS",false};
{"KC-130_wing_2", 0 ,"KC-130_map_wings_2",false};
{"KC-130_notes", 0 ,"KC-130_notes_empty",true};
{"KC-130_FPod", 0 ,"kc-130_map_drg",false};
}
name = "Spain ALA 31 TK.10-06"
countries = {"SPN"} -- and any others you want to add
PHP md5_file($ filename)= d0c32f9e38cc6e1bb8b54a6aca4a0190
JAVA md5(File)= 08bf57441b904c69e9ce3ca02a9257c7
我一直在尝试找到这两个代码之间的关系,以了解有什么不同,但没有找到任何区别。我检查了10个Java的md5脚本,它们都给出了相同的结果。
有什么办法可以解决这个问题?
编辑:对第一条评论的解决方案:将FTP客户端上的传输类型更改为二进制,以避免将txt文件更改为ASCII编码,更改其长度和md5。