gpt4 book ai didi

java - 识别新创建的文件并处理它们

转载 作者:行者123 更新时间:2023-12-01 14:41:45 24 4
gpt4 key购买 nike

基本上我必须监视文件夹中是否有新创建的文件。

在我的项目中,我们有一个调度程序,每 10 分钟运行一次,现在我们所做的是读取所有文件名并检查数据库是否已处理,如果未处理则不检查,然后在数据库中输入一个条目并进行处理它。

我用谷歌搜索了一下,发现很少有涉及路径监听器的解决方案,如 JNotify 、 FileAlterationObserver 类以及 FileAlterationMonitor ,但我必须监视大约 20 个文件夹,所以我一直在寻找任何更简单的解决方案,例如每当我读取文件时将其标记为已处理(重命名并在其名称或任何唯一文本后附加“已处理”),下次读取未标记为“已处理”的文件。

通过这种方法,我将必须读取文件夹中的所有文件并检查每个文件名是否以“已处理”结尾。

我是jave新手,所以我不知道这是否可能,所以我的问题是,我可以查询所有不以“已处理”结尾的文件名而不迭代所有文件名吗文件夹中存在的文件名?

或者有人有其他解决方案吗?

最佳答案

处理后我们还需要该文件吗?谁在修改文件?如果是通过程序进行,该程序是否需要有关已处理文件的信息?当要修改文件的程序将其再次从 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
}

关于java - 识别新创建的文件并处理它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15879547/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com