1

ディレクトリの変更を監視する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 を書きたい場合は、NullPointerExceptionat line を取得しますfor(String y : old)。なんで?

4

1 に答える 1