【问题标题】:Can I write a program to monitor files using Java or another language? [duplicate]我可以编写一个程序来使用 Java 或其他语言监视文件吗? [复制]
【发布时间】:2014-09-21 22:26:44
【问题描述】:

有没有办法在 Linux 中使用 java 来监控文件? 我不是指修改文件,而是任何读取操作。
例如,如果我有一个 x.txt 文件,我可以知道用户是否从该文件打印、发送电子邮件或复制数据? 如果我不能在 java 中做到这一点,是否可以在其他语言中实现?或者有没有开源程序可以做到这一点?

【问题讨论】:

  • 能否请您通过发布链接或关键字指导我,以便我可以开始搜索(:
  • @Dareen 这可能很明显,但是您不能从“Java 文件监控”开始搜索吗?这看起来相当简单。
  • 我有点失望,这被标记为重复。问题是关于检测文件读取,而不是更改。链接的问题不涉及检测。
  • @Rotten194 对帖子进行了编辑,以在关闭后澄清这一微妙之处。

标签: java file system


【解决方案1】:

Linux inotify API 可以为被监视的文件发出IN_ACCESS 事件。不幸的是,出于某种原因(Windows 兼容性?),默认的 Java API 没有公开这一点。

第三方库 https://bitbucket.org/nbargnesi/inotify-java 加载了一个 C++ .so 库,该库挂钩到本机库以解决此问题。我没有亲自使用过这个库,但是阅读测试文件的一个基本方法似乎是:

InotifyContext ic = new InotifyContext();
Random random = new Random(); // for generating file descriptors
ic.addPath("file/you/want/to/monitor", random.nextInt());
final InotifyEventListener i = new InotifyEventListener() {
    @Override
    public void filesystemEventOccurred(InotifyEvent e) {
        if (e.isAccess())
            // handle file being accessed
    }
};
ic.addListener(i, random.nextInt());

注意:这会捕获从文件中读取的任何,例如您自己的程序(我认为,您需要对其进行测试),用户只需在文本编辑器中打开文件并立即关闭它而不做任何事情,一些文件系统爬虫会自动查找文件并扫描它是否有病毒(尽管 Linux,所以...)。在立即对用户大喊大叫之前,您可能需要对事件进行一些额外的检查。

【讨论】:

  • 谢谢(:。我一定会试试这个代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多