学习Jnotify文件监视用例
研究文件监视(Windows),对文件的增加、修改、重命名、删除做记录,找到Java开源技术Jnotify,做了稍微学习,留下一点记录,以资备用,网络上资料有限。
package com.jnotify; import net.contentobjects.jnotify.JNotify; /** * Monitor file directory file (folder ) is created, modified, deleted, renamed files[folders] * (To adapt to a sub-folders). * JDK: 1.6.0_19 * JAR: jnotify-0.94.jar * @author Dennis Zhao * @createdTime:2012-09-28 * Technology from website: http://jnotify.sourceforge.net/ */ public class JNotifyTest { public static void main(String[] args) { JNotifyTest test = new JNotifyTest(); try { test.sample(); } catch (Exception e) { e.printStackTrace(); } } public void sample() throws Exception { // path to watch String path = "D:\\abc"; // watch mask, specify events you care about, // or JNotify.FILE_ANY for all events. int mask = JNotify.FILE_CREATED | JNotify.FILE_DELETED | JNotify.FILE_MODIFIED | JNotify.FILE_RENAMED; // watch subtree? boolean watchSubtree = true; // add actual watch int watchID = JNotify.addWatch(path, mask, watchSubtree, new Listener()); // sleep a little, the application will exit if you // don't (watching is asynchronous), depending on your // application, this may not be required Thread.sleep(15000); //Thread.sleep(5000); // to remove watch the watch boolean res = JNotify.removeWatch(watchID); if (!res) { // invalid watch ID specified. System.out.println("Delete from data : " + watchID); } } }
package com.jnotify; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import net.contentobjects.jnotify.JNotifyListener; /** * Listener implement * JDK: 1.6.0_19 * JAR: jnotify-0.94.jar * @author Dennis Zhao * @createdTime:2012-09-28 * Technology from website: http://jnotify.sourceforge.net/ */ public class Listener implements JNotifyListener { public void fileRenamed(int wd, String rootPath, String oldName, String newName) { writeTextAppend("Renamed==1==File path== [" + rootPath + File.separator + oldName + "] --> [" + rootPath + File.separator + newName + "]==time==" + System.currentTimeMillis()); //print("Renamed " + rootPath + " : " + oldName + " -> " + newName); operateDataDB2(wd,rootPath + File.separator + newName,"Renamed",rootPath,rootPath + File.separator + oldName,rootPath + File.separator + newName); } public void fileModified(int wd, String rootPath, String name) { writeTextAppend("Modified==2==File path== [" + rootPath + File.separator + name + "]==time==" + System.currentTimeMillis()); //print("Modified " + rootPath + " : " + name); operateDataDB2(wd,rootPath + File.separator + name,"Modified",rootPath,"",""); } public void fileDeleted(int wd, String rootPath, String name) { writeTextAppend("Deleted==3==File path== [" + rootPath + File.separator + name + "]==time==" + System.currentTimeMillis()); //print("Deleted " + rootPath + " : " + name); operateDataDB2(wd,rootPath + File.separator + name,"Deleted",rootPath,"",""); } public void fileCreated(int wd, String rootPath, String name) { writeTextAppend("Created==4==File path== [" + rootPath + File.separator + name + "]==time==" + System.currentTimeMillis()); //print("Created " + rootPath + " : " + name); operateDataDB2(wd,rootPath + File.separator + name,"Created",rootPath,"",""); } void print(String msg) { System.out.println(msg); } /** * * writeText * @param record * @return the void */ private void writeTextAppend(final String record) { try { FileWriter writer = new FileWriter("d:\\File_log.txt", true); writer.write(record + "\n"); writer.close(); } catch (IOException e) { e.printStackTrace(); } } /** * * oracle database test * operateDataOracle * @param wd * @param operatName * @param operateType * @param rootPath * @param oldName * @param newName * @return void */ private void operateDataOracle(int wd, String operatName, String operateType, String rootPath, String oldName, String newName) { Connection conn = null; try { Class.forName("oracle.jdbc.driver.OracleDriver"); conn = java.sql.DriverManager.getConnection("jdbc:oracle:thin:@10.199.130.221:1522:ORCL", "scott", "tiger"); String sql = "insert into t_file_log (ID, OP_NAME, OP_DATETIME, OP_ID, OP_TYPE, ROOT_PATH, OLD_NAME, NEW_NAME) " + "values (seq_file_log.nextval, ?, sysdate, ?, ?, ?, ?, ?)"; PreparedStatement pst = conn.prepareStatement(sql); pst.setString(1, operatName); pst.setInt(2, wd); pst.setString(3, operateType); pst.setString(4, rootPath); pst.setString(5, oldName); pst.setString(6, newName); pst.executeUpdate(); pst.close(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } /** * * DB2 database test * operateDataDB2 * @param wd * @param operatName * @param operateType * @param rootPath * @param oldName * @param newName * @return void */ private void operateDataDB2(int wd, String operatName, String operateType, String rootPath, String oldName, String newName) { Connection conn = null; try { Class.forName("com.ibm.db2.jcc.DB2Driver"); conn = java.sql.DriverManager.getConnection( "jdbc:db2://10.199.30.249:50000/DB902:currentSchema=ORCL;", "SCOTT", "TIGER"); String sql = "insert into TRSUAT.t_file_log (ID, OP_NAME, OP_DATETIME, OP_ID, OP_TYPE, ROOT_PATH, OLD_NAME, NEW_NAME) " + "values (seq_file_log.nextval, ?, sysdate, ?, ?, ?, ?, ?)"; PreparedStatement pst = conn.prepareStatement(sql); pst.setString(1, operatName); pst.setInt(2, wd); pst.setString(3, operateType); pst.setString(4, rootPath); pst.setString(5, oldName); pst.setString(6, newName); pst.executeUpdate(); pst.close(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } }
注意地方:
增加启动命令项,
java -Djava.library.path=. -jar jnotify-VER.jar [dir]
这里有如图Ecplise下面简单设置,如下图
如需要实际业务操作,根据情况做适当调整。