为Linux上的目录中的文件编写事件侦听器

时间:2010-05-08 19:59:09

标签: c# java python linux event-handling

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

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

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

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

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

5 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

但是,除非您处理大量文件/目录,否则我不排除轮询文件系统。

答案 2 :(得分:1)

在Linux中有一种称为FAM(文件更改监视器)的东西,它比睡眠/民意调查更好。 还有一个python包:Python FAM

依赖于QT可能要少得多。

答案 3 :(得分:0)

我会推荐Qt和Python。

我之前使用PyQt进行过类似的项目。 Qt有一个文件系统监视器,它监视目录和文件的更新,触发可以捕获和执行操作的事件(如open vlc)。

QFileSystemWatcher

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

QSystemTrayIcon

答案 4 :(得分:0)

对于Python,你可以尝试这个this,我发现它比pyinotify更简单。