我編寫了一個Java程序,該程序監視目錄中的更改。我保存了一個文件列表(String []),並且在每隔x秒我會得到一個新列表,並比較它們以查找哪些文件已被添加以及哪些文件已被刪除。檢查文件是否更改名稱
問題是,如果我重命名一個文件,它將顯示爲刪除具有舊名稱的文件,然後作爲新名稱的文件的添加。
我能做些什麼來跟蹤名稱更改?
編輯:我想找到適用於Java 6的解決方案 代碼:
public void run() {
int ok;
while(true) {
// verify if modified from last check
if(modified != file.lastModified()) {
Date d = new Date();
list = file.list();
// look for new files
for(String x : list) {
ok = 0;
for(String y : old) {
if(x.equals(y)) {
ok = 1;
}
}
if(ok == 0) {
display.setText(display.getText() + "Created file " + x + " at " + d.toString() + "\n");
}
}
// looking for old files
for(String x : old) {
ok = 0;
for(String y : list) {
if(x.equals(y)) {
ok = 1;
}
}
if(ok == 0) {
display.setText(display.getText() + "Deleted file " + x + " at " + d.toString() + "\n");
}
}
}
old = file.list();
modified = file.lastModified();
try {
Thread.sleep(f * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
而且,在這段代碼,如果我想要寫舊=列表(保留最近列表),我在線for(String y : old)
處獲得NullPointerException
。爲什麼?
你有分享的代碼,所以我們知道你目前是如何完成這個的? –
你是基於文件名嗎?而不是名稱,可能是你可以在文件系統中使用id排序的東西...即使一個文件重命名它的id不會改變... http://stackoverflow.com/questions/8289598/ file-id-for-keeping-track-of-file-changes-in-java – pinkpanther
根據文件數量的不同,你可以對文件的MD5和MD5進行檢查,並持續檢查這些哈希值,以便確定如果文件被刪除或沒有。 – Averroes