码迷,mamicode.com
首页 > 编程语言 > 详细

Java技巧:java实现文件监控技巧分享

时间:2016-04-18 13:32:12      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:

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

}

}

}


运行效果:在D盘新建一个文件和修改文件名操作。

自传 http://www.biyinjishi.com/products/a65-b6550/d100148/
个人出书 http://www.biyinjishi.com/products/a65-b6580/d100144
微信书 http://www.biyinjishi.com/products/a65-b6580/d100146/
微博书 http://www.biyinjishi.com/products/a65-b6580/d100147/
家谱 http://www.biyinjishi.com/products/a65-b6580/d100149/
LOGO设计 http://www.biyinjishi.com/products/a70-b7010/
名片设计 http://www.biyinjishi.com/products/a70-b7015/
宣传单页设计 http://www.biyinjishi.com/products/a70-b7020/
宣传画册设计 http://www.biyinjishi.com/products/a70-b7025/
修片调色 http://www.biyinjishi.com/products/a70-b7050/
打字录入 http://www.biyinjishi.com/products/a70-b7060/
证件快照 http://www.biyinjishi.com/products/a99-b9910/
收发传真 http://www.biyinjishi.com/products/a99-b9915/
装订装帧 http://www.biyinjishi.com/products/a99-b9920/
刻字刻章 http://www.biyinjishi.com/products/a99-b9925/
光盘刻录 http://www.biyinjishi.com/products/a99-b9960/

Java技巧:java实现文件监控技巧分享

标签:

原文地址:http://www.cnblogs.com/SA-Jim/p/5403797.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!