当前位置: 代码迷 >> J2SE >> Java 怎么监控文件目录的变化
  详细解决方案

Java 怎么监控文件目录的变化

热度:284   发布时间:2016-04-24 18:02:54.0
Java 如何监控文件目录的变化
Java如何监控某个目录下文件的变化,如文件增加、删除、修改,也包括子文件夹中的文件,有人建议使用jni,由于要跨平台,最好是纯java的,谢谢。

------解决方案--------------------
http://topic.csdn.net/t/20030708/09/2002243.html
------解决方案--------------------
提供个想法,也不知道算不算是最笨的。
利用File的listFiles() ,lastModified() ,isDirectory() 等方法
0.写个类用于记录目录结构
1.循环遍历需要监视的文件夹,记录下整个目录结构
2.隔个5秒,10秒的,再遍历一遍
3.比较两次取得的目录结构,是否相同
------解决方案--------------------
探讨
提供个想法,也不知道算不算是最笨的。
利用File的listFiles() ,lastModified() ,isDirectory() 等方法
0.写个类用于记录目录结构
1.循环遍历需要监视的文件夹,记录下整个目录结构
2.隔个5秒,10秒的,再遍历一遍
3.比较两次取得的目录结构,是否相同

------解决方案--------------------
弄个线程,隔段时间就扫一遍?
------解决方案--------------------
修改文件夹是通过java吗?如果是的话就很简单了
写事件类,写监听器,使用Proxy代理下就OK了!
如果不是通过java的话那就是用jni吧,或者只能是 线程扫描了。
------解决方案--------------------
探讨
修改文件夹是通过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("========================");    }
  相关解决方案