Java 处理多个文件时如何使inotify等待

Java 处理多个文件时如何使inotify等待,java,synchronization,inotify,Java,Synchronization,Inotify,我正在开发一个目录同步程序,它使用jnotify检查更改 其思想是,只要jnotify检测到更改,就会执行同步。问题是,当许多文件被复制到或修改到一个目录中时,会执行许多同步,而不是一次大型同步 理想情况下,如果要将100个大文件复制到目录A,则在所有文件完全复制到目录A之前,不会同步到目录B 我曾考虑过如何使用临时目录(A1)来保存文件,直到它们被完全复制,然后将它们移动到A1中。但是这个解决方案不起作用,因为我使用unison来执行只发送文件增量的同步-这是我想使用的功能,而不是绕过它 也许

我正在开发一个目录同步程序,它使用jnotify检查更改

其思想是,只要jnotify检测到更改,就会执行同步。问题是,当许多文件被复制到或修改到一个目录中时,会执行许多同步,而不是一次大型同步

理想情况下,如果要将100个大文件复制到目录A,则在所有文件完全复制到目录A之前,不会同步到目录B

我曾考虑过如何使用临时目录(A1)来保存文件,直到它们被完全复制,然后将它们移动到A1中。但是这个解决方案不起作用,因为我使用unison来执行只发送文件增量的同步-这是我想使用的功能,而不是绕过它


也许有一种方法可以使用i/jnotify来检测何时同时更新多个文件?

这里有一个建议。在你的应用程序上设置一个集合,让它收集“修改过的”文件/等等,它会将该文件添加到集合中,当文件数量超过一定数量时,比如说100,你会进行同步。如果你想让计时器具有合理的响应性,也可以设置一个计时器,比如如果没有新的更改/etc被添加到集合中,持续X个时间,也可以进行同步。

这里有一个建议。在你的应用程序上设置一个集合,让它收集“修改过的”文件/等等,它会将该文件添加到集合中,当文件数量超过一定数量时,比如说100,你会进行同步。如果你想让计时器具有合理的响应性,也可以设置一个计时器,例如如果在X时间段内没有新的更改/等添加到集合中,请继续并进行同步。

感谢您的响应。到目前为止,我认为它可能会工作如下,直到我能找到一个更好的解决方案。。。每当一个动作(ie-CREATE)发生时,让侦听器线程等待1秒钟,看看是否检测到另一个动作。如果未检测到任何操作,则执行同步。然后,一旦启动了同步,请推迟进一步的同步调用,直到当前同步完成。如果要同步文件,请在第一次同步后执行另一次同步。这将强制同步到一批小文件组中。或者一次同步一个大文件。这似乎是合理的。@Jono-这似乎是合理的,我个人会有一点更长的时间来延迟自己,但总体思路似乎是合理的,它需要一些工作来实施,但它是可行的。您将如何处理对文件的更改?(直接拷贝,或类似rsync的东西)不确定处理文件更改是什么意思。我将在整个目录中使用inotify来检查其中的任何更改。我的意思是,您将如何在更改的文件/目录上进行复制?每次都使用rsync还是普通拷贝?啊。我计划使用unison。我需要双向同步。我更喜欢用Java编写的东西,它可以更好地与我的代码集成,但它似乎是完成这项工作的最佳工具。感谢您的回复。到目前为止,我认为它可能会工作如下,直到我能找到一个更好的解决方案。。。每当一个动作(ie-CREATE)发生时,让侦听器线程等待1秒钟,看看是否检测到另一个动作。如果未检测到任何操作,则执行同步。然后,一旦启动了同步,请推迟进一步的同步调用,直到当前同步完成。如果要同步文件,请在第一次同步后执行另一次同步。这将强制同步到一批小文件组中。或者一次同步一个大文件。这似乎是合理的。@Jono-这似乎是合理的,我个人会有一点更长的时间来延迟自己,但总体思路似乎是合理的,它需要一些工作来实施,但它是可行的。您将如何处理对文件的更改?(直接拷贝,或类似rsync的东西)不确定处理文件更改是什么意思。我将在整个目录中使用inotify来检查其中的任何更改。我的意思是,您将如何在更改的文件/目录上进行复制?每次都使用rsync还是普通拷贝?啊。我计划使用unison。我需要双向同步。我更喜欢用Java编写的东西,它能更好地与我的代码集成,但它似乎是这项工作的最佳工具。