首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java实现资料监控

2013-09-11 
java实现文件监控转自http://www.blogjava.net/pengo/archive/2011/01/09/342622.htmljava本身不能直接监

java实现文件监控
转自http://www.blogjava.net/pengo/archive/2011/01/09/342622.html

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

热点排行