[英]Watching a directory for new file on Windows
我有一个模块,必须检查特定目录的新文件(Create)。 该文件将由另一个我无法控制或可见的系统创建。
我使用了Java WatchService API,当创建新文件时,我能够获得事件ENTRY_CREATE。 下面是代码。
WatchService watchService = FileSystems.getDefault().newWatchService();
Path path = Paths.get(dirLocation);
path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_MODIFY,
StandardWatchEventKinds.ENTRY_DELETE);
WatchKey key;
while ((key = watchService.take()) != null) {
for (WatchEvent<?> event : key.pollEvents()) {
if ("ENTRY_CREATE".equalsIgnoreCase(event.kind().name())) {
// File reading here
}
问题是在尝试读取新文件的某个时候,我正在获取空内容而没有任何异常。 搜索Google和SO,我发现如果文件写入不完整,可能会发生这种情况。 为了解决这个问题,我尝试了随机访问文件,锁定并创建了FileOutputStream,但没有运气,我得到了空的内容,没有任何例外。 最后我尝试了下面的工作。 但我担心的是,这必须在单独的线程内部进行检查,以便不阻塞WatchService事件和线程数量随着文件数量的增长而增长,也可能是更昂贵的操作。
closed = file.renameTo(file);
有没有其他有效的方法来检查文件写入操作是否完成? 或者是否有任何API可以处理这个?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.