java监听文件或文件将爱有没有变化

1.nio监听文件夹变化

package com.suyl.candy.test;

import java.nio.file.*;

public class Test_ResourceListener {
    public static void main(String[] args) {
        try {

            //创建一个监听服务
            WatchService service = FileSystems.getDefault().newWatchService();
            //设置路径
            Path path = Paths.get("I:\\test");
            //注册监听器
            path.register(service, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY);

            WatchKey watchKey;

            //使用dowhile
            do {
                //获取一个watch key
                watchKey = service.take();
                for (WatchEvent<?> event : watchKey.pollEvents()) {
                    //如果时间列表不为空,打印事件内容
                    WatchEvent.Kind<?> kind = event.kind();
                    Path eventPath = (Path) event.context();
                    System.out.println(eventPath + ":" + kind + ":" + eventPath);

                }
                System.out.println("目录内容发生改变");

            } while (watchKey.reset());
        } catch (Exception e) {
            e.printStackTrace();

        }

        // 1、通过FileSystems.getDefault().newWatchService()创建一个监听服务;
        // 2、设置路径;
        // 3、对目录注册一个监听器;
        // 4、之后进入循环,等待watch key;
        // 5、此时如果有事件发生可通过watchkey的pollevent()方法获取;
        // 6、之后可以对event处理;
    }
}

2.common-io实现的文件夹变化的监听

package com.suyl.candy.test;


import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;

import java.io.File;
import java.io.FileFilter;


public class Test_FileAlterationObserver {
    public static void main(String[] args) throws Exception {
        Test_FileAlterationObserver test = new Test_FileAlterationObserver();
        test.test();
    }

    public void test() throws Exception {
        String filePath = "I:\\test";
        FileFilter filter = FileFilterUtils.and(new MyFileFilter());
        FileAlterationObserver filealtertionObserver = new FileAlterationObserver(filePath, filter);
        filealtertionObserver.addListener(new FileAlterationListenerAdaptor() {

            @Override
            public void onDirectoryCreate(File directory) {
                // TODO Auto-generated method stub
                System.out.println("onDirectoryCreate");
                super.onDirectoryCreate(directory);
            }

            @Override
            public void onDirectoryDelete(File directory) {
                // TODO Auto-generated method stub
                System.out.println("onDirectoryDelete");
                super.onDirectoryDelete(directory);
            }

            @Override
            public void onFileChange(File file) {
                // TODO Auto-generated method stub
                System.out.println("onFileChange");
                super.onFileChange(file);
            }

            @Override
            public void onFileCreate(File file) {
                System.out.println("onFileCreate" + file.getAbsoluteFile());
                super.onFileCreate(file);
            }

            @Override
            public void onFileDelete(File file) {
                // TODO Auto-generated method stub
                System.out.println("onFileDelete" + file.getAbsolutePath());
                super.onFileDelete(file);
            }

            @Override
            public void onStart(FileAlterationObserver observer) {
                // TODO Auto-generated method stub
                System.out.println("onStart");
                super.onStart(observer);
            }

        });

        FileAlterationMonitor filealterationMonitor = new FileAlterationMonitor(1000);
        filealterationMonitor.addObserver(filealtertionObserver);
        filealterationMonitor.start();
    }

}

class MyFileFilter implements IOFileFilter {

    @Override
    public boolean accept(File file) {
        /*String extension=FilenameUtils.getExtension(file.getAbsolutePath());
        if(extension!=null&&extension.equals("txt")){
            return true;
        }
        return false;*/
        return true;
    }

    @Override
    public boolean accept(File dir, String name) {
        return true;
    }

}

3.log4j实现文件内容变化的监听 

package com.suyl.candy.test;

import org.apache.log4j.helpers.FileWatchdog;


public class Test_Log4jWatchdog {
    public static void main(String[] args) {
        GloablConfig gloablconfig = new GloablConfig("I:\\test\\suyl.txt");
        gloablconfig.setDelay(10000);
        gloablconfig.start();
        while (true) {
            try {
                Thread.sleep(10000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public static class GloablConfig extends FileWatchdog {
        protected GloablConfig(String filename) {
            super(filename);
        }

        @Override
        protected void doOnChange() {
            System.out.println(filename);
        }

    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值