问题标签 [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 - 一个事件被“重复”是什么意思?
阅读 javadocs WatchEvent
,我看到该count()
方法让我知道事件是否被其结果重复。
返回事件计数。如果事件计数大于 1,则这是重复事件。
这到底是什么意思?这是否意味着两个或多个WatchEvent
对象引用相同的“事件”(例如正在创建的文件)?
我正在Oracle 网站上试验新API 的示例WatchService
,这部分让我很困惑,特别是因为我会在连续运行相同的测试代码时获得不同数量的事件(在其中我使用 a 写入文件FileWriter
而不与手动),但结果count()
永远不会超过 1。
编辑:我意识到这可能与关于重复事件的其他问题有关,但这并不能回答重复事件的实际含义。
java - Java WatchService 不适用于某些文件夹
我想使用Java 7 WatchService来监视/proc
文件夹,但这不起作用(未报告对文件夹所做的更改)。我已经测试了其他文件夹,例如/home/user/Desktop
and/tmp
并且它可以工作。可能是什么原因?是因为权限吗?/proc
显然由 root 拥有,而另一个文件夹由登录用户拥有。然而/tmp
,它也归root所有,但它可以工作。我正在使用这个基本实现来测试它。
我的操作系统是 Ubuntu 13.10 64 位。甲骨文 Java 1.7.0_51。
java-6 - what's a good alternative to Java7 WatchService?
i need to pick a frameWork similar to watch service available on Java7 . what's a good alternative framework t to track changes on file System .
thanks in advance
java - 在使用 rsync 将文件复制到目录中时,Java Watch 服务从操作系统获取临时文件通知而不是实际文件
使用 rsync 复制文件时,操作系统会通知临时文件而不是实际文件以监视服务。
例如,下面是一些文件通知,它们在扩展名“.ser”之后附加了一些字符,并带有前缀“.”:
具有以下名称的文件的预期通知:
代码快照如下,
如果我们在没有 rsync 的情况下复制文件,比如 cp、scp,那么我们会得到正确的通知,但是在 rsync 的情况下,我们不会得到正确的文件修改,那么 rsync 有什么问题,
请随时分享对此的想法。
rsync 命令:
rsync -rtvz <source> <destination>
java - Java:在复制内容之前通知 WatchService
我试图将一个非常小的文件复制并粘贴到监视服务观察到的文件夹中。第一次效果很好,但是在所有后续的复制和粘贴操作中,我得到一个异常,另一个进程已经处理了该文件。通过实验,我发现当 Windows 创建文件时通知我的服务,而不是在复制文件内容时通知我的服务。如果我锁定文件,Windows 将无法复制任何数据并且文件为空。另一方面,如果我将文件移动到目录中,一切正常。
这是Windows的错误吗?我无法在 Mac 或 Linux 工作站上对其进行测试。或者也许只是我无能为力。任何帮助表示赞赏。
我的代码如下所示:
java - 观察目录的变化 Java.nio.file
我知道java.nio.file
可以提供方法来观察文件的变化,比如新文件、修改和删除。但现在我想知道是否有一种方法可以查看是否正在输入目录或某个文件是否被某个应用程序(如编辑器)打开。
我已经阅读了 API 文档,但找不到实现这一目标的方法。任何人都可以提供有关此问题的线索,也许是其他 API 文档,而不是java.nio.file
可以提供解决此问题的方法。
java - java.nio.file.StandardWatchEventKinds.OVERFLOW 发生时如何获取丢失的事件
我正忙于编写一个使用java.nio.file.WatchService
.
该事件被轮询并正确处理。
下次我打电话时问题来了watchService.take()
在处理事件期间,发生了更多事件,因此第一个事件是 type StandardWatchEventKinds.OVERFLOW
。
如何获取这些事件或阻止事件丢失?重要的是我不会丢失任何事件。
java - 如何查看文件中的新内容并检索该内容
我有一个名为foo.txt
. 该文件包含一些文本。我想实现以下功能:
- 我启动程序
- 向文件中写入一些内容(例如添加一行
new string in foo.txt
:) - 我只想获取此文件的新内容。
你能澄清这个问题的最佳解决方案吗?我也想解决相关问题:如果我修改foo.txt
我想查看差异。
我在 Java 中找到的最接近的工具是,WatchService
但如果我理解正确,这个工具只能检测文件系统上发生的事件类型(创建文件或删除或修改)。
java - Windows 7 中的 Watchservice 不起作用
此代码在 Linux 中运行良好,但在 Windows 7 中无法运行:要更新文件内容,我必须单击输出文件。诀窍在哪里?
我正在使用 Windows 7 prof,NetBeans IDE 8.0 RC1(Build 201402242200)更新到版本 NetBeans 8.0 Patch 1.1,JDK 1.8
编辑:根据要求减少代码。
编辑2:文件路径
编辑 3:我用来写入数据的 Metatrader 代码
编辑 4:截屏以更好地显示我的问题:仅当我单击输出文件时才更新数据
java - WatchService WatchEvent .context() 方法为 ENTRY_MODIFY 上的文件返回不一致的相对路径(goutputstream-####,Linux 操作系统)
在这段代码中,我希望使用给定路径内容的最新版本更新 HashMap,并将绝对路径作为字符串用作键。问题是WatchEvent
' 的.context()
方法在每个事件上为我提供了相同文件的不同相对路径。
这是一段代码:
这是b.txt
将监视目录中的文件从内容“abc”修改为“abc 123”后的示例输出
请注意,所有这些都来自打开文件 /workspaces/b.txt (已经存在)并修改其内容。):
感兴趣的线是
Path oldfilepath=path.resolve((Path)event.context());
请注意如何oldfilepath
将同一文件解析为“/workspaces/.goutputstream-MFJ6HX”,然后再解析为“/workspaces/.goutputstream-BRC1HX”。
event.context()
每次修改后为同一文件返回不同的路径。这是 Linux 问题还是 Java 问题,我究竟如何获得该文件的标准相对路径(在这种情况下,它是“b.txt”)?
似乎当我执行修改时,我得到了一系列创建/修改/创建事件,并且ENTRY_CREATE
s 具有正确的文件名,同时ENTRY_MODIFY
s 具有临时句柄(我猜是文件的临时版本在保存之间使用。)我需要能够捕获文件修改并从该事件中提取正确的文件名。
我知道我的文件系统可能在我刚刚打开、修改和保存文件时在后台进行临时文件创建和处理,但是如何从事件指示ENTRY_MODIFY
给我的临时文件中提取正确的文件名?是否有某种方法可以对与此修改有关的事件进行分组,以便我可以找到附件ENTRY_CREATE
并从中获取文件名?或者以某种方式向上遍历导致此的调用堆栈ENTRY_CREATE
?
我可以在封闭事件中看到文件名ENTRY_CREATE
,围绕 each ENTRY_MODIFY
,但我希望有一种比某种更优雅的方法来做到这一点(获取不是的最新事件,ENTRY_MODIFY
然后从中获取.context()
。)
谢谢!