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原生版本监控


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


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