处理完成后,我们还需要该文件吗?谁在修改文件?如果是通过程序,该程序是否需要有关已处理文件的信息?当该程序要修改文件时,将再次将其从file1_processed重命名为file1?
如果您更改文件名,您必须考虑这些用例以及更多(虽然我不了解您的系统,但我觉得它会完成)。
最好只有我们JNotifier
,使用起来非常简单。使用它,您实际上可以删除调度程序。每当通知针对特定文件(添加/修改等)时,您实际上可以仅针对特定文件更新数据库,无需遍历文件夹。
只需确保在少数情况下您可以收到多个通知JNotifier
,例如,当添加新文件时,您会被添加、修改,重命名时您会被重命名、修改。所以这些事情你要小心。
使用旧的调度程序,您也可以这样做。您可以将文件的最后更新时间戳保存在数据库中。在下一个计划中,您只需检查最新的时间戳,如果时间戳较新,则处理它并重新更新数据库。
您也可以混合使用JNotify
调度程序。通过 jnotify 更新 some 中更改/修改的文件名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
}