java实现文件监控_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > java实现文件监控

java实现文件监控

 2011/1/10 9:46:37  ijavagos  http://ijavagos.javaeye.com  我要评论(0)
  • 摘要:java本身不能直接监听系统的文件操作事件,不过可以先编写C/C++调用操作系统的API监听文件,再通过jni调用的方式实现。限于本人的C/C++水平有限,没有用C/C++实现该接口,而且已有开源组件JNotify实现了这个功能,本文例子使用JNotify。publicclassMainFrameextendsJFrame{privateJPanelcontentPane;privateJTextFieldtextField;privateJTextAreatextArea
  • 标签:实现 文件 Java

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 " );
????????}
????}
}
发表评论
用户名: 匿名