Get新技能,Java实现文件监控

举报
西魏陶渊明 发表于 2022/09/25 03:42:04 2022/09/25
【摘要】 作者: 八阿哥的剑 博客: https://springlearn.cn 一日一句毒鸡汤 问世间钱为何物,只叫人生死相许。!😄 # Java原生版本监控 public class JavaWatchAPI { public static void main(String[] args)...

作者: 八阿哥的剑

博客: https://springlearn.cn

一日一句毒鸡汤

问世间钱为何物,只叫人生死相许。!😄

# Java原生版本监控


        public class JavaWatchAPI {
           public static void main(String[] args) throws Exception {
               //第一步:取得WatchService
                WatchService watchService = FileSystems.getDefault().newWatchService();
               //第二步:确定要监控的路径
                Path path = Paths.get("/Users/liuxin/Github/nobug-learn-project/nobug-learn-01/src/main/java");
               //第三步:为本路径绑定WatchService,并确定监控的事件
                path.register(
                        watchService,
                       // StandardWatchEventKinds.ENTRY_CREATE—当有新文件时触发。可能是创建了一个新文件
                        StandardWatchEventKinds.ENTRY_CREATE,
                       // StandardWatchEventKinds.ENTRY_DELETE—当文件被删除、移动或重命名时触发
                        StandardWatchEventKinds.ENTRY_DELETE,
                       // StandardWatchEventKinds.ENTRY_MODIFY—当文件被修改时触发。
                        StandardWatchEventKinds.ENTRY_MODIFY);
               // StandardWatchEventKinds.OVERFLOW—触发表示丢失或丢弃的事件。
                WatchKey key = null;
               while ((key = watchService.take()) != null) {
                   for (WatchEvent<?> event : key.pollEvents()) {
                        System.out.println("事件" + event.kind() + "发生了,文件是:" + event.context());
                    }
                    key.reset();
                }
            }
        }
    
   
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

# Common IO 工具包监控


        package cn.github.chinesszz;
        import org.apache.commons.io.filefilter.FileFilterUtils;
        import org.apache.commons.io.monitor.FileAlterationListener;
        import org.apache.commons.io.monitor.FileAlterationMonitor;
        import org.apache.commons.io.monitor.FileAlterationObserver;
        import org.junit.Test;
        import java.io.File;
        import java.util.concurrent.TimeUnit;
        /**
         * @author liuxin
         * 2021/11/9 8:55 下午
         */
        public class CommonIOAPI {
           public static void main(String[] args) throws Exception {
               File directory = new File("/Users/liuxin/Github/nobug-learn-project/nobug-learn-01/src/main/java");
               // 轮询间隔 5 秒
               long interval = TimeUnit.SECONDS.toMillis(5);
               // 创建一个文件观察器用于处理文件的格式
               FileAlterationObserver observer = new FileAlterationObserver(directory, FileFilterUtils.and(
                        FileFilterUtils.fileFileFilter(), FileFilterUtils.suffixFileFilter(".txt"),
                        FileFilterUtils.prefixFileFilter("lx")));
               // 设置文件变化监听器
                observer.addListener(new MyFileListener());
               FileAlterationMonitor monitor = new FileAlterationMonitor(interval, observer);
                monitor.start();
                System.out.println(1);
            }
           @Test
           public void watchDir() throws Exception {
               File directory = new File("/Users/liuxin/Github/nobug-learn-project/nobug-learn-01/src/main/java");
               FileAlterationObserver fileAlterationObserver = new FileAlterationObserver(directory, FileFilterUtils.and(
                        FileFilterUtils.directoryFileFilter()));
               long interval = TimeUnit.SECONDS.toMillis(5);
               // 设置文件变化监听器
                fileAlterationObserver.addListener(new MyFileListener());
               FileAlterationMonitor monitor = new FileAlterationMonitor(interval, fileAlterationObserver);
                monitor.start();
               while (true);
            }
           static final class MyFileListener implements FileAlterationListener {
               @Override
               public void onStart(FileAlterationObserver fileAlterationObserver) {
                    System.out.println("monitor start scan files..");
                }
               @Override
               public void onDirectoryCreate(File file) {
                    System.out.println(file.getName() + " director created.");
                }
               @Override
               public void onDirectoryChange(File file) {
                    System.out.println(file.getName() + " director changed.");
                }
               @Override
               public void onDirectoryDelete(File file) {
                    System.out.println(file.getName() + " director deleted.");
                }
               @Override
               public void onFileCreate(File file) {
                    System.out.println(file.getName() + " created.");
                }
               @Override
               public void onFileChange(File file) {
                    System.out.println(file.getName() + " changed.");
                }
               @Override
               public void onFileDelete(File file) {
                    System.out.println(file.getName() + " deleted.");
                }
               @Override
               public void onStop(FileAlterationObserver fileAlterationObserver) {
                    System.out.println("monitor stop scanning..");
                }
            }
        }
    
   
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96

文章来源: springlearn.blog.csdn.net,作者:西魏陶渊明,版权归原作者所有,如需转载,请联系作者。

原文链接:springlearn.blog.csdn.net/article/details/125858042

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。