処理が完了したら、そのファイルはもう必要ですか? 誰がファイルを変更していますか? プログラム経由の場合、そのプログラムは既に処理されたファイルに関する情報を必要としますか? そのプログラムがファイルを変更しようとしているとき、ファイルの名前をfile1_processedからfile1に変更しますか?
ファイル名を変更する場合は、これらの使用例やその他の多くのことを考慮する必要があります (ただし、システムの詳細はわかりませんが、完全になると感じました)。
使い方は本当に簡単です
。JNotifier
これを使用すると、実際にスケジューラを削除できます。特定のファイル (追加/変更など) に関する通知が来るたびに、実際にはその時点で特定のファイルのみについてのみデータベースを更新できます。フォルダーをトラバースする必要はありません。
JNotifier
新しいファイルが追加されたとき、追加されたとき、変更されたとき、名前が変更されたとき、名前が変更されたとき、変更されたときなど、いくつかの場合に で複数の通知を受け取ることができることを確認してください。したがって、これらのことはあなたが世話をしなければなりません。
古いスケジューラでも同じことができます。ファイルの最終更新タイムスタンプをデータベースに保存できます。次のスケジュールでは、最新のタイムスタンプを確認するだけです。タイムスタンプが新しい場合は、それを処理してデータベースを再更新します。
また、スケジューラと
の混在も可能です。JNotify
jnotify により、一部の変更/変更されたファイル名を更新するとADT
、スケジューラは ADT 内を検索し、変更されたファイル パスを取得し、データベース内のそれらのファイルのみを更新できます。
以下の例を参考にしてください。
public void register(String path) throws JNotifyException {
int mask = JNotify.FILE_CREATED | JNotify.FILE_DELETED
| JNotify.FILE_MODIFIED | JNotify.FILE_RENAMED;
boolean watchSubtree = true;
if (pathSet.contains(path)) {
return;
}
System.out.println("Adding watch for: " + path);
JNotify.addWatch(path, mask, watchSubtree,
new JNotifyListener() {
@Override
public void fileCreated(int arg0, String folderName, String fileName) {
fileChanged("New object created: " + fileName + " in folder: " + folderName);
}
@Override
public void fileDeleted(int arg0, String folderName, String fileName) {
fileChanged(fileName + " deleted in folder: " + folderName);
}
@Override
public void fileModified(int arg0, String folderName, String fileName) {
// fileChanged(fileName + " modified in folder: " + folderName);
}
@Override
public void fileRenamed(int arg0, String folderName, String oldFileName,
String newFileName) {
fileChanged(oldFileName + " renamed to: "+ oldFileName +" in folder: " + folderName);
}
});
}
private void fileChanged(String str){
//your code here
}