我正在编写一个程序来监视某个目录中的任何新文件,每当新文件到达时,程序都会对这些文件采取一些行动。我正在使用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
}
如代码块中所述,一个java。io。FileNotFoundException是在我尝试基于文件创建FileReader后引发的。我知道该文件存在,因为我的WatchService检测到该文件正在创建,并为该文件的路径提供了触发器。上下文()。
我甚至通过调用文件上的toAbsoltePath()来确保FileReader正在使用文件的绝对路径。
我在打印相关文件路径的有问题的代码行之前有一个调试语句,是的,打印的路径是文件的正确绝对路径。那么为什么FileReader没有检测到文件呢?
我希望有人能帮助我,我意识到这篇文章特别长,但我不确定问题是由我的WatchService、文件还是FileReader引起的,所以我想包含尽可能多的信息。
非常感谢。
我知道该文件存在,因为我的WatchService检测到该文件正在创建,并为该文件的路径提供了触发器。上下文()。
不,没有。
您未能查询事件的类型。JDK提供了这些标准类型,但您只能检查是否存在溢出。
您必须检查接收到的事件实际上是修改还是创建(即,StandardWatchEventKind.event{CREATE,MODIFY})。
此外,不要使用文件。一直使用路径。
确保事件是创建或修改后,使用文件打开文件的输入流或读取器。newInputStream()或文件。newBufferedReader()。如果使用这个,你仍然会得到一个异常,至少它比FileNotFoundException更有意义(阅读我上面发布的链接…)。
当我从图库中选择一个图像时,我可以获得该图像的Uri,如下所示: 上面检索到的Uri的格式是content://media/external/images/media/7266 但是,当我试图获取刚保存为文件的图像的Uri时,无法以这种格式检索Uri: 从上面的代码获得的Uri是/storage/emulated/0/dcim/camera/02-04-16 12-49-16.png 我相信,这不
我正在使用jquery filepond image uploader插件,它将文件上传变成拖放区。 下面是初始化文件池的脚本 我计划在不使用ajax的情况下提交一个表单,它是一个dircect表单提交。 我只是想知道如何获取被拖放的文件名,以便将文件名值分配给另一个隐藏输入,这样我就可以通过form submit直接提交整个表单。 当文件被丢弃时,我已经将事件记录在console.log(“文件
在Google Appengine中,是否可以从Google cloud storage文件路径中检索blob_key?文件直接上传到云存储。
7.2.1 逻辑设备和文件 a) 逻辑设备 在Fortran中对文件和外部设备的操作都是通过逻辑设备进行的。在对文件和外部设备进行操作之前,都要把它们连接到逻辑设备上。内部文件的设备描述符和外部文件的设备描述符是不同的:内部文件用一个字符变量或其它变量名来描述,外部文件用OPEN语句打开文件时的数字(单元号)作为文件的描述,或是用默认的设备单元号包括星号(*)作为文件的描述。对于一个设备描述符,不
我试图安装OpenShift Origin使用安西布尔playbook。 我有3个主机,3个外部ETCD主机。因此,在运行行动手册时,我得到了以下错误: 我在Ansible库存文件中设置了以下变量: 在主 上,提供以下信息: 据我了解,当我运行 Ansible 剧本时,这些 etcd 所需的证书压缩包正在导出到触发剧本的主机表单的 路径。由于我使用具有无密码sudo访问权限的其他用户运行Ansib
我在我的应用程序中使用材料2,但在这个问题中,我想专门解决输入的问题。 正如您在API参考中看到的,有一个名为“required”的属性绑定,它在占位符中显示为星号。 因此,我想知道是否有方法检查表单控件在Angular中是否有特定的验证器,因为我真的不想为每个输入手动设置 我阅读了AbstractControl文档,但没有找到任何有关它的内容。我遇到了方法(具有讽刺意味的是,它在任何地方都没有记