Java如何监控某个目录下文件的变化,如文件增加、删除、修改,也包括子文件夹中的文件,有人建议使用jni,由于要跨平台,最好是纯java的,谢谢。
------解决方案--------------------
http://topic.csdn.net/t/20030708/09/2002243.html
------解决方案--------------------
提供个想法,也不知道算不算是最笨的。
利用File的listFiles() ,lastModified() ,isDirectory() 等方法
0.写个类用于记录目录结构
1.循环遍历需要监视的文件夹,记录下整个目录结构
2.隔个5秒,10秒的,再遍历一遍
3.比较两次取得的目录结构,是否相同
------解决方案--------------------
------解决方案--------------------
弄个线程,隔段时间就扫一遍?
------解决方案--------------------
修改文件夹是通过java吗?如果是的话就很简单了
写事件类,写监听器,使用Proxy代理下就OK了!
如果不是通过java的话那就是用jni吧,或者只能是 线程扫描了。
------解决方案--------------------
------解决方案--------------------
关注
------解决方案--------------------
up..很是有难度
------解决方案--------------------
------解决方案--------------------
想到一个貌似简单的方法,不过是区别OS的,也就是你底层要设计得好。
1.利用command列出文件夹结构(包括子文件夹), 例如: widnows用 dir /S; solaris用 ls -r(具体参数记不清了),保存文件
2.隔段时间,再列一遍
3.然后比较两个文件
------解决方案--------------------
- Java code
/** * 递归扫描整个路径 * * @param file * 要扫描的路径 * @param dirFileMap * 存放扫描结果 */ private void totalScan(File file, Map<String, String> dirFileMap) { String[] fileList = file.list(); // 判断是否为空目录 if (null != fileList) { for (int i = 0; i < fileList.length; i++) { String pname = file.getAbsolutePath() + "\\" + fileList[i]; File tempFile = new File(pname); if (tempFile.isDirectory()) { dirFileMap .put("文件夹:" + pname, tempFile.lastModified() + "");//修改了此处 totalScan(tempFile, dirFileMap); } else { // 不相同的文件夹下,存放的文件可能名字相同,但是同一路径下的文件肯定不会相同, // 所以采用全路径做为key值 dirFileMap.put("文件:" + pname, tempFile.lastModified() + "");//修改了此处 } } } } /** * 得到增加的文件及文件夹,并增加到已有的文件信息中 */ private void getAddedFile(Map<String, String> nowDirFileMap) { for (Iterator<String> iterator = nowDirFileMap.keySet().iterator(); iterator .hasNext();) { String key = iterator.next(); String oldValue = oldDirFileMap.get(key); String newValue = nowDirFileMap.get(key); if (null == oldValue) { oldDirFileMap.put(key, newValue); System.out.println("新增的" + key); } } } /** * 得到删除的文件及文件夹,并删除已经不存在的文件信息 */ private void getDeletedFile(Map<String, String> nowDirFileMap) { for (Iterator<String> iterator = oldDirFileMap.keySet().iterator(); iterator .hasNext();) { String key = iterator.next(); String oldValue = oldDirFileMap.get(key); String newValue = nowDirFileMap.get(key); if (null == nowDirFileMap.get(key)) { System.out.println("删除的" + key); iterator.remove(); oldDirFileMap.remove(key); } else if (!newValue.equals(oldValue)) {//修改了此处 System.out.println("修改的" + key); oldDirFileMap.put(key, newValue); } } } /** * 展示原有文件 */ private void displayNowFile() { System.out.println(dir + "路径原有文件目录如下:\n"); Set set = oldDirFileMap.keySet(); Iterator<String> iterator = set.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next());//此处修改 } System.out.println("========================"); }