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

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");

        }

    }

}

你可能感兴趣的:(notify)