我面临以下情况......我的文件系统中的某个地方()我接受来自第三方应用程序的文件。例如,在文件夹c:\ temp
中这些文件包含特定元数据,我必须执行以下操作:
a)根据元数据重新定位(所以首先我将解析它们)在2级结构中,例如: C:\ TEMP \ idXXX \ idYYYY \ fileZZZ 每个idYYYY文件夹可以包含多个文件 每个idXXX文件夹可以包含多个文件夹(例如idYYYY,idYYYYE等) 在根文件夹中可能有多个idXXXX类型的文件夹
b)重新分配这些文件后,我应监控每个第一级目录(idXXXX)的时间间隔变化
c)如果没有找到任何更改(没有创建其他文件夹/文件),那么我应该将其压缩并发送到某个地方!
d)实施这样的服务以在后台连续运行...只是轮询这个根目录
我正在尝试在java中找到一个可以管理整个业务场景的库!
任何想法?
答案 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相同。