0
這是我用來從sdcard複製sharedpreference文件來回的代碼。爲什麼File.hashCode()不同
File fileSrc = new File(filePath, "userdata.xml");
File fileDes = new File("/data/data/com.nik/shared_prefs/", "userdata.xml");
...
...
private void copyFile(File fileSrc, File fileDes) {
FileInputStream fileinputstream=null;
FileOutputStream fileoutputstream=null;
try {
fileinputstream = new FileInputStream(fileSrc);
fileoutputstream = new FileOutputStream(fileDes);
byte[] buffer = new byte[4096];
int count = 0;
while ((count = fileinputstream.read(buffer)) > 0) {
fileoutputstream.write(buffer, 0, count);
}
fileinputstream.close();
fileoutputstream.flush();
fileoutputstream.close();
}
catch(IOException e) {
e.printStackTrace();
}
}
if(fileSrc.hashCode() == fileDes.hashCode()){
Log.d("Copy result: ", "Files Equal!");
} else {
Log.d("Copy result: ", "Files not Equal!");
}
if(fileSrc == fileDes){
Log.d("=>Copy result: ", "Files Equal!");
} else {
Log.d("=>Copy result: ", "Files not Equal!");
}
}
上述代碼成功運行並複製文件,但始終顯示「Files not Equal!」在日誌中。
如果我在資源管理器中打開文件,內容是相同的。那麼爲什麼我會得到「文件不等於!」在這兩種情況下.....
編輯:
我創建了下面的方法來創建一個文件
private MessageDigest fileHash(File file) {
MessageDigest md=null;
try {
md = MessageDigest.getInstance("SHA-256");
FileInputStream fileinputstream = new FileInputStream(file);
byte[] dataBytes = new byte[1024];
int nread = 0;
while ((nread = fileinputstream.read(dataBytes)) != -1) {
md.update(dataBytes, 0, nread);
}
}
catch(IOException e) {
e.printStackTrace();
}
catch(NoSuchAlgorithmException e){
e.printStackTrace();
}
return md;
}
的SHA-256散列與
if(fileHash(fileSrc) == fileHash(fileDes)){
Log.d("=>Copy result: ", "Files Equal!");
} else {
Log.d("=>Copy result: ", "Files not Equal!");
}
稱它爲
仍然得到「文件不等於!」。
那麼有沒有什麼方法可以檢查這兩個文件是相同的內容.. -明智的。 –
@NiktheGeeK:是的 - 你閱讀文件的內容......(作爲第一遍,檢查長度,然後開始從兩個文件讀取,*邏輯*逐字節(但可能是緩衝區),並比較字節。) –
like ...打開inputstream和outputstream,讀取數據並比較..是否沒有其他的方法來獲取文件的哈希值並進行比較? –