gpt4 book ai didi

java - 针对 WatchEvent 证明存在的文件获取 FileNotFoundException

转载 作者:行者123 更新时间:2023-11-30 07:34:33 25 4
gpt4 key购买 nike

我正在编写一个程序,用于监视某个目录中是否有任何新文件,每当新文件到达时,程序就会对这些文件采取一些操作。我正在使用 WatchService 来监视该目录,因此我觉得可以最终证明该文件确实存在。

但是,每当我尝试在 WatchService 找到的文件上创建 FileReader 时,我都会收到 FileNotFoundException。

我确保 Java 在尝试创建 FileReader 时使用绝对路径,因此我没有理由相信它在错误的位置查找。

我对 FileReader、FileNotFoundException 以及 File 和 Path 对象进行了大量研究,但我仍然无法确定抛出此异常的原因。

我对 WatchService 不太熟悉,但我使用了在其他论坛上找到的代码,它似乎可以很好地检测文件并将其传递。代码如下。

try
{
WatchService watcher = FileSystems.getDefault().newWatchService();
Path dir = Paths.get("C:\\sample\\path")
WatchKey key = dir.register(watcher, ENTRY_CREATE);
for(;;)
{
try
{
key = watcher.take();
}
catch(InterruptedException exception)
{
//code
}
finally
{
for(WatchEvent<?> event: key.pollEvents())
{
WatchEvent.Kind<?> kind = event.kind();

if (kind == OVERFLOW)
{
continue;
}

WatchEvent<Path> trigger = (WatchEvent<Path>)event;
Path filename = trigger.context();
filename = filename.toAbsolutePath();
File theFile = filename.toFile();
//EXCEPTION IS THROWN HERE
FileReader fReader = new FileReader(theFile);
/**
* more code
**/
}
}
}
}
catch(IOException exception)
{
//code
}

如代码块中所述,在我尝试基于该文件创建 FileReader 后,会引发 java.io.FileNotFoundException。我知道该文件存在,因为我的 WatchService 检测到正在创建的文件并通过 trigger.context() 提供了文件的路径。

我什至通过调用文件上的 toAbsolutePath() 来确保 FileReader 使用文件的绝对路径。

我在有问题的代码行之前有一个调试语句,用于打印有问题的文件的路径,是的,打印的路径是文件的正确绝对路径。那么为什么 FileReader 检测不到该文件呢?

我希望有人可以帮助我,我意识到这篇文章非常长,但我不确定问题是否是由我的 WatchService、文件或 FileReader 引起的,所以我想包含尽可能多的信息有可能。

非常感谢。

最佳答案

I know that the file exists because my WatchService detected the file being created and provided the file's path with trigger.context().

不,没有。

您未能查询事件的类型。 JDK提供these standard types ,但你只检查是否有溢出。

您必须检查收到的事件实际上是修改还是创建(即StandardWatchEventKind.EVENT_{CREATE,MODIFY})。

更重要的是,don't use File 。始终使用Path

一旦您确保事件是创建或修改,则使用 Files.newInputStream() 打开文件的 InputStreamReaderFiles.newBufferedReader() 。如果使用此方法,您仍然遇到异常,至少它将比 FileNotFoundException 更有意义(请阅读我上面发布的链接...)。

关于java - 针对 WatchEvent 证明存在的文件获取 FileNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35586886/

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