`
pengzhaocheng16
  • 浏览: 177722 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java开源组件jNotify实现文件监控

    博客分类:
  • java
阅读更多
http://hi.baidu.com/wzwahl36/item/591030c630da7a66f7c95d98
java本身不能直接监听系统的文件操作事件,不过可以先编写C/C++调用操作系统的API监听文件,再通过jni调用的方式实现。限于本人的C /C++水平有限,没有用C/C++实现该接口,而且已有开源组件JNotify实现了这个功能,本文例子使用JNotify。



public class MainFrame extends JFrame {



    private JPanel contentPane;

    private JTextField textField;

    private JTextArea textArea;



    public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable() {

            public void run() {

                try {

                    MainFrame frame = new MainFrame();

                    frame.setVisible(true);

                } catch (Exception e) {

                    e.printStackTrace();

                }

            }

        });

    }



    public MainFrame() {

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        setBounds(100, 100, 543, 300);

        contentPane = new JPanel();

        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

        setContentPane(contentPane);

        contentPane.setLayout(null);



        JLabel label = new JLabel("监控路径:");

        label.setBounds(33, 20, 65, 15);

        contentPane.add(label);



        textField = new JTextField("D:/");

        textField.setBounds(90, 16, 219, 21);

        contentPane.add(textField);

        textField.setColumns(10);



        JButton button = new JButton("开始监控");

        button.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                try {

                    addWatch();

                } catch (Exception ex) {

                    ex.printStackTrace();

                }

            }

        });

        button.setBounds(319, 16, 93, 23);

        contentPane.add(button);



        textArea = new JTextArea();

        JScrollPane scrollPane = new JScrollPane(textArea);

        scrollPane.setBounds(33, 45, 480, 207);

        contentPane.add(scrollPane);

    }



    public void addWatch() throws Exception {

        String path = textField.getText();

        int mask = JNotify.FILE_CREATED | JNotify.FILE_DELETED

                | JNotify.FILE_MODIFIED | JNotify.FILE_RENAMED;

        boolean watchSubtree = true;

        //添加文件监听

        int watchID = JNotify.addWatch(path, mask, watchSubtree, new Listener());

    }



    class Listener implements JNotifyListener {

        public void fileRenamed(int wd, String rootPath, String oldName,

                String newName) {

            textArea.append("文件:" + rootPath + " : " + oldName + " 重命名为: "

                    + newName + "\n");

        }



        public void fileModified(int wd, String rootPath, String name) {

            textArea.append("文件修改 " + rootPath + " : " + name + "\n");

        }



        public void fileDeleted(int wd, String rootPath, String name) {

            textArea.append("删除文件: " + rootPath + " : " + name + "\n");

        }



        public void fileCreated(int wd, String rootPath, String name) {

            textArea.append("新建文件: " + rootPath + " : " + name + "\n");

        }

    }

}
分享到:
评论

相关推荐

    利用java开源组件实现生成验证码

    利用java开源组件及servlet实现生成验证码

    java开源组件源码-文本转语音

    java开源组件tts源码-文本转语音。The FreeTTS package contains a speech synthesis system written entirely in the Java programming language

    java开源的文件管理系统

    java开源的文件管理系统,可以学习学习

    java开源私有网盘 kiftd-v1.1.0

    适合家庭、团队或小型组织在局域网&公网中搭建私有云盘实现文件共享。支持Windows/Linux/Mac OS,只需3分钟即可完成部署,同时还支持视频播放/文档预览/音乐播放/文件夹上传/权限管理/WebDAV等高级功能。最新版v...

    java开源包6

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    Java文件同步开源项目Sync

    Java文件同步开源项目Sync 使用简单的命令即可完成文件系统的同步,可以在其上自己包装业务 含源码和jar

    Java Tree的几种开源组件

    NULL 博文链接:https://jun1986.iteye.com/blog/1144751

    java开源包10

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    转 Java 开源条码生成组件 Barcode4J

    转 Java 开源条码生成组件 Barcode4J.htm,很好的教材

    java开源包9

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    Java调用dll文件开源组件jar包及说明文档

    一个用于在java中调用dll动态代码库的开源组件,JNative-1.3.2

    java开源包8

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    JavaMelody开源系统性能监控

    JavaMelody开源系统性能监控,JavaMelody开源系统性能监控!

    JAVA上百实例源码以及开源项目

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    Java开源邮件服务器james源码

    Java开源邮件服务器apache-james-2.3.2源代码

    java开源版企业门户网站_功能齐全,带后台

    java开源版企业门户网站_功能齐全,带后台,带数据库

    基于Java的开源免费舆情监测网络监控系统设计源码

    本资源提供了一套基于Java语言编写的开源免费舆情监测网络监控系统设计源码。该项目包含了3436个JavaScript文件、352个PNG图像文件、274个CSS样式文件、272个SVG图形文件、235个Java源文件、129个HTML文件、61个JPG...

    java开源包4

    BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...

    java 实现大文件上传

    文件上传一直是B/S结构中很重要的一项功能,在java中并没有很好的实现文件上传的类包,因此出现了一些开源的组件,Smartupload ,commons-fileupload,还有国内的一个"牛人"的(不好意思叫不上名字来),这几个组件中...

    开源分布式文件系统

    本书具体介绍开源分布式文件系统相关技术、原理和设计,是学习分布式文件系统的参考资料

Global site tag (gtag.js) - Google Analytics