【问题标题】:Programming an Event listener for files in a directory on Linux在 Linux 上为目录中的文件编写事件侦听器
【发布时间】:2010-05-08 19:59:09
【问题描述】:

在 Ubuntu linux 上,当您观看 flash 视频时,它会在视频缓冲时临时保存在 /tmp 中作为 flv 文件。我用vlc直接播放这些文件。

目前,我编写了一个快捷方式,当点击时,它可以直接扫描并使用 vlc 打开 /tmp 中的最新文件。

但是,我想编写一个 Java 应用程序,该应用程序将持续监视此 /tmp 目录中是否有任何新的 flv 文件,并自动在 vlc 中打开它。我知道我可以使用 Runtime.exec() 打开带有 flv 文件的 VLC 应用程序。但是,我不想运行 while(true) 循环(带睡眠)来扫描文件。

如何在 Linux 上使用事件处理(Java 或任何其他语言)来完成这项任务?

编辑:
我也想知道Java是否是解决这个问题的正确方法。正如下面有人建议的那样,Python 和 QT 似乎更合适。

【问题讨论】:

    标签: c# java python linux event-handling


    【解决方案1】:

    对于 Python,请使用 pyinotify:http://trac.dbzteam.org/pyinotify。这是一个简单的独立库;不需要丑陋的 Qt 依赖。

    【讨论】:

      【解决方案2】:

      你见过JNotify 吗?它是一个 Java 库,使用特定于操作系统的代码来侦听文件系统事件。

      不过,我不排除轮询文件系统,除非您要处理大量文件/目录。

      【讨论】:

      • 我一定会看看的。顺便说一句,通过 while(true) 进行轮询不是一种不好的做法吗?只有六个文件要监视。我也想知道 Java 是否适合此目的。
      • 我认为轮询可以是一种实用的解决方案,只要您轮询的力度不至于影响磁盘性能。每秒轮询(比如说)一次不会对您的系统产生任何明显的影响。
      • 如果/tmp中有很多其他文件,它会。
      • 你能满足多少?当您拥有数千个文件(可能是数千个)时,我预计性能会降低。
      【解决方案3】:

      在 Linux 中有一种叫做 FAM(文件更改监视器)的东西,它比睡眠/轮询的东西做得更好。 它也有一个 python 包:Python FAM

      与 QT 相比,它的依赖可能要少得多。

      【讨论】:

        【解决方案4】:

        我会推荐 Qt 和 Python。

        我之前在类似项目中使用过 PyQt。 Qt 有一个文件系统观察器,它监视目录和文件的更新,这些更新会触发您可以捕获和执行操作的事件(例如打开 vlc)。

        QFileSystemWatcher

        如果您只想始终在后台运行此程序,Qt 还具有允许您在系统托盘中运行程序的功能。这就是我所做的,只是添加了一两个菜单进行修改。

        QSystemTrayIcon

        【讨论】:

        • 谢谢布伦丹。我对 PyQt 的经验最少,但有兴趣尝试一下。根据您的经验,您有什么想要推荐的资源/书籍吗?
        • 仅用于监视文件事件的 Qt 依赖项会很糟糕。
        【解决方案5】:

        对于 Python,你可以试试这个this,我觉得它比 pyinotify 简单。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-09-04
          • 2020-07-27
          • 2020-09-06
          • 1970-01-01
          • 2013-03-08
          • 1970-01-01
          • 2018-11-28
          相关资源
          最近更新 更多