观察文件夹结构以进行相应的更改和处理文件

时间:2014-11-06 13:55:29

标签: java file java-ee

我面临以下情况......我的文件系统中的某个地方()我接受来自第三方应用程序的文件。例如,在文件夹c:\ temp

这些文件包含特定元数据,我必须执行以下操作:

a)根据元数据重新定位(所以首先我将解析它们)在2级结构中,例如: C:\ TEMP \ idXXX \ idYYYY \ fileZZZ 每个idYYYY文件夹可以包含多个文件 每个idXXX文件夹可以包含多个文件夹(例如idYYYY,idYYYYE等) 在根文件夹中可能有多个idXXXX类型的文件夹

b)重新分配这些文件后,我应监控每个第一级目录(idXXXX)的时间间隔变化

c)如果没有找到任何更改(没有创建其他文件夹/文件),那么我应该将其压缩并发送到某个地方!

d)实施这样的服务以在后台连续运行...只是轮询这个根目录

我正在尝试在java中找到一个可以管理整个业务场景的库!

任何想法?

2 个答案:

答案 0 :(得分:3)

使用WatchService监控您的目录:

WatchService watchService = FileSystems.getDefault().newWatchService();
WatchKey watchKey = path.register(watchService,
                                  ENTRY_CREATE,
                                  ENTRY_DELETE,
                                  ENTRY_MODIFY);

其余的只是使用通常的File方法实现您的逻辑。

答案 1 :(得分:0)

如果您只需要注意更改,则可以保存文件' String数组中的名称并在另一个数组中读取它们,因此将它们与for循环进行比较将告诉您该文件夹中的任何新文件。

for (i= 0; i< oldfiles.length(); i++){
if (oldfiles[i] != newfiles[i]){  //in case there's a difference
//your code here
}
}

请注意,如果没有从newfiles[]删除任何文件名且添加了一些文件名,则newfiles[]将大于oldfiles[],而且这些名称将是新名称,因此您应该继续阅读newfiles []数组:

for (i=oldfiles.length() + 1; i<newfiles.length(); i++){
// your code here
}

最后你应该将newfiles[]数组复制到oldfiles[]数组中以进行下一次比较

希望它有所帮助。我不确定java-ee语法是否与标准java#s相同。

相关问题