ディレクトリの変更を監視する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();
}
}
}
また、このコードでは、(最後のリストを保持するために) old = list を書きたい場合は、NullPointerException
at line を取得しますfor(String y : old)
。なんで?