问题标签 [watchservice]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 使用 WatchService 监控远程共享文件夹 (Windows/SMB)
我正在尝试使用 WatchService (java.nio.file.*) 监视远程文件夹。一切都适用于本地文件夹。但是我无法弄清楚如何监控远程共享。我可以传递凭据吗?
(如果执行代码的用户有权挂载共享,它也可以工作。)
以下是我的部分代码:
干杯,斯蒂芬妮
java - 在 JAVA 中使用 WatchService。我可以同时观看子目录吗?
在 JAVA 中,我将使用 WatchService 监视目录。
例如,如果我监视 /users/monitor,WatchService 只能监视一个目录。
但我想“同时”观看每个子目录
我该如何编码?T_T
- - - - - - - - - - - - - -代码 - - - - - - - - - - - ---------
- - - - - - - - - - - - - -代码 - - - - - - - - - - - ---------
java - 使用 Java NIO 监视服务监视 http 资源
我需要监控 Amazon S3 上的目录以检查是否有任何新文件添加到该目录。我尝试使用 Java NIO Watch Service,但它无法正常工作。如果我在提供的 S3 路径中使用以下语法:
然后我收到以下错误:
如果我file://
从路径中删除前缀,则会生成以下错误:
如果我将“Line2”修改为,Path path=Paths.get("https://abc/dir");
则生成以下跟踪:
请让我知道我在这里做错了什么以及是否可以使用 Java 监视服务来监视此类 Web 资源,或者是否有任何其他框架/api。
谢谢
java - Java WatchService 监视未终止
我正在开发一个在 Linux Mint 下使用 Java watchservice (Java 8) 的应用程序。我遇到的一个有趣的问题是 inotify 手表用完了。
我在Eclipse下开发,行为如下:
当应用程序启动时,它会递归一个目录结构,对找到的每个目录进行监视。当前的测试用例使用 13,660 条路径。我的最大值设置为 16384。
如果我停止并重新启动应用程序几次(20 多次),它似乎可以正常运行。然而,最终,我会收到一连串系统错误,表明已达到最大手表数量。但是,如果我重新启动 Eclipse,问题就会消失。
显然,Watch Service 并没有释放它的所有资源,但是它获得的 13,660 块手表中,只有少数(我猜不到一百)被保留了下来。除非我关闭 Eclipse 的 Java 实例并重新启动它,否则它们似乎不会被释放。
为了解决这个问题,我确保当应用程序关闭并取消监视服务任务时调用监视服务的关闭方法。
我做的唯一另一件事是我为两个不同的目的运行两个单独的监视服务。有人告诉我,您不需要运行多个,也许这就是问题所在,但如果我能提供帮助,我宁愿不运行一项手表服务。
也就是说,对于我如何确定这个错误的原因有什么想法或建议吗?
为大量代码发布道歉。这是我对 WatchService 类的实现。
几点注意事项:
pathFinder 在单独的线程中运行,只是一个文件访问者 - 遍历目录树并返回找到的所有目录/文件的路径。
只有在将更改发布到 pathsChanged 属性(来自 pathFinder 的 onSucceeded 回调)时,才会调用 Register。
pathChanged 属性始终由 setAll() 调用更新。它只发布最新的更改,并不意味着是累积的。除了 watchservice,其他类会监听这些属性并做出相应的响应。
}
java - WatchService 性能与许多目录
我想使用 JavaWatchService
来侦听大量目录(数十万)的更改,但我不知道它是否适合如此数量的监视目录。
有没有人有WatchService
这样数量的目录的经验?
如果有帮助,WatchService
它将在带有 EXT4 文件系统的 CentOS 6.5 上使用。
谢谢,米凯尔
java - File.exists() 在 smb2 网络共享上不准确(使用 WatchService?)
根据此文档:http : //technet.microsoft.com/en-us/library/ff686200%28v=ws.10%29.aspx File.exists() 在 smb2 网络共享上不准确。我无法更改任何寄存器设置,所以我想处理它。根据文档,有一个 API 可以从文件系统获取通知。我假设 WatchService 是这个 API 的 Java 实现。我对么?
我从 jdk 示例中的 WatchDir 示例开始,并对其进行了一些剥离。我只需要知道何时创建和删除文件(我不关心文件修改)。为了进行测试,我在触发新事件时添加了新的 File.exists()。我还启动了一个单独的线程来测试文件是否存在。当我不启动这个单独的线程时,文件存在立即返回 true。当额外的线程启动时,它不再准确。我需要一个更准确的 file.exists 检查整个应用程序和所有正在运行的线程。
为了测试,我使用了 2 台 Windows 7 电脑(运行 java 7)(默认启用 smb2)。工作目录必须在远程 pc 上,并且文件 test.txt 必须在远程 pc 上创建(或从另一个文件夹复制)(不使用网络驱动器,但在 pc 本身上)。
这是我的测试代码:
我的测试用例的输出是这样的:
如您所见,文件 test.txt 是在第 9 行创建的。watchService 已通知它。但实际上应用程序无法使用它:FileExistsThread 在第 20 行看到了它(至少 10 x 300 毫秒后)。
有任何想法吗?
[编辑]
我也试过这个:
此方法在我预期的时候返回 true。但我仍然无法使用它之后的文件。我实际上想打开一个新的 FileInputStream(file)。这将引发 FileNotFoundExeption,而此 fileExists() 方法返回 true。现在我等到 new File().exists() 在打开 FileInputStream 之前返回 true。这行得通。
谢谢
java - Java追加文本并连续保存文件
我想连续生成一行单词并附加到一个文本文件中。当我使用 WatchService 时,我希望立即附加该行。WatchService 要求我在检测到对文件的修改并做出相应反应之前进行“保存”。附加每一行后有没有办法“保存”?
java - Java - WatchService 另一台机器文件夹
有没有办法在使用 IP 地址的另一台机器上使用 watch 来更改文件?
目前我的代码是:
Path d = FileSystem.getDefault().getPath(System.getProperty("user.dir"),"");
WatchKey wk = dir.register(ws, .... , ...);
无论如何,将 Path 变量更改为指向另一个 IP 中的文件夹。即 192.168.123.123?
java - 使用 Wathservice api 监视目录
我正在编写一个实用程序来监视新文件夹或文件的特定目录,一旦添加了新文件夹或文件,我需要将其复制到其他位置,我正在使用 java watchservice,所以问题是目录是否被写入观看目录然后如何确保目录完全写入不(对于我使用 RandomAccessFiles 来确保这一点的文件)所以有什么类似的检查目录
java - WatchService (Windows 7):删除文件时,它会触发 ENTRY_MODIFY 和 ENTRY_DELETE 事件吗?
在使用 WatchService 时,我发现如果我删除正在监视的目录中的文件,它会触发一个事件,ENTRY_MODIFY
然后是一个ENTRY_DELETE
事件。
我意识到从技术上讲,文件可能会在删除之前被修改,但是删除文件会触发 ENTRY_MODIFY (大概没人关心)真的是预期的行为吗?
为了处理这个问题,我必须在触发传递 ENTRY_MODIFY 事件之前添加一个要检查的条件:
有没有更好的方法来处理这个问题(功能)?