• Atitit java文件监控 WatchService 的使用 目录 1. // 处理下级多层目录 1 2. // 处理新目录 1 3. Code 2 常见问题对于 1.// 处理下级多层目


    Atitit java文件监控  WatchService 的使用

     

    目录

    1. 常见问题对于 1

    2. // 处理下级多层目录 1

    3. // 处理新目录 1

    4. Java net php系列方案 2

    4.1.1. vb.net 用FileSystemWatcher监视文件变化,文件变化时如..._百度知道 2

    5. Code 2

     

     

    1. 常见问题对于
    2. // 处理下级多层目录


    Files.walkFileTree(path, new SimpleFileVisitor<Path>() {
    @Override
    public FileVisitResult preVisitDirectory(Path dir,
    BasicFileAttributes attrs) throws IOException {
    dir.register(watchService,
    StandardWatchEventKinds.ENTRY_CREATE,
    StandardWatchEventKinds.ENTRY_DELETE);
    return FileVisitResult.CONTINUE;
    }
    });

     

    1. // 处理新目录


    Path curdir = (Path) WatchKey1.watchable();
    Path Path1_newDir = curdir.resolve(fileName);
    if (Files.isDirectory(Path1_newDir)) {
    // 注意watchEvent.context()这个只有一个文件名(坑爹啊 为啥不给全路径)
    Path1_newDir.register(watchService,
    StandardWatchEventKinds.ENTRY_CREATE,
    StandardWatchEventKinds.ENTRY_DELETE);
    }

    }
    // 重置其关联的监控器
    WatchKey1.reset();

    }
    }

    1. Java net php系列方案
        1. vb.net 用FileSystemWatcher监视文件变化,文件变化时如..._百度知道

    1个回答 - 回答时间: 2013年9月3日

    最佳答案: Private WithEvents fw As IO.FileSystemWatcher Private Shared Sub OnChanged(source As Object, e As IO.FileSystemEventArgs) Handles f

     

    1. Code




    2019/1/1 14:03:52
    常清芮 2019/1/1 14:03:52

    package com.censoft;

    import java.io 

    .File;
    import java.io 

    .FileFilter;
    import java.io 

    .IOException;
    import java.nio.file.FileSystems;
    import java.nio.file.FileVisitResult;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.SimpleFileVisitor;
    import java.nio.file.StandardWatchEventKinds;
    import java.nio.file.WatchEvent;
    import java.nio.file.WatchKey;
    import java.nio.file.WatchService;
    import java.nio.file.attribute.BasicFileAttributes;

    import org.apache.commons.io 

    .FileUtils;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.joda.time.DateTime;

    public class filemonitor {

    public static void main(String[] args) throws InterruptedException,
    IOException {

    String filePath = "d:\\filenew";

    watchFileMethod(filePath, new customProcess() {

    public void process(String fname) {
    System.out.println(fname);

    }
    });

    }

    private static void watchFileMethod(String filePath,
    customProcess customProcess) throws IOException,
    InterruptedException {
    Log log = LogFactory.getLog(WatchFilePathTask.class);
    // 获取监控服务
    // 可同时获取多个监控服务
    final WatchService watchService = FileSystems.getDefault()
    .newWatchService();
    log.debug("获取监控服务" + watchService);

    FileUtils.forceMkdir(new File(filePath));
    Path path = FileSystems.getDefault().getPath(filePath);
    log.debug("@@@:Path:" + path);
    // BasicFileAttributes

    // 处理下级多层目录
    Files.walkFileTree(path, new SimpleFileVisitor<Path>() {
    @Override
    public FileVisitResult preVisitDirectory(Path dir,
    BasicFileAttributes attrs) throws IOException {
    dir.register(watchService,
    StandardWatchEventKinds.ENTRY_CREATE,
    StandardWatchEventKinds.ENTRY_DELETE);
    return FileVisitResult.CONTINUE;
    }
    });

    // 注册监控服务,监控新增事件
    // 将指定的监控器注册给Path对象所代表的文件节点,register方法返回的就是节点的监控池
    /**
     * p.register(watchService, StandardWatchEventKinds.ENTRY_MODIFY,
     * StandardWatchEventKinds.ENTRY_DELETE,
     * StandardWatchEventKinds.ENTRY_CREATE);
     */
    WatchKey WatchKey1 = path.register(watchService,
    StandardWatchEventKinds.ENTRY_CREATE);
    while (true) {
    // 尝试获取下一个变化信息,如果没有则一直等待
    // 长时间一直监控需要用take,如果是指定时间监控则用poll
    WatchKey1 = watchService.take();
    for (WatchEvent<?> WatchEvent1 : WatchKey1.pollEvents()) { // 获取事件列表
    // System.out.println("["+path+"/"+event.context()+"]文件发生了["+event.kind()+"]事件");

    // 检查文件名是否符合要求
    Path curdir1 = (Path) WatchKey1.watchable();
    // 获取目录下新增的文件名
    //
    String fileName = WatchEvent1.context().toString();
    String filePath2 =curdir1.toFile().getAbsolutePath().toString()
    + File.separator + fileName;
    // log.info 

    ("import filePath:"+filePath2);

    customProcess.process(filePath2);

    // 处理新目录
    Path curdir = (Path) WatchKey1.watchable();
    Path Path1_newDir = curdir.resolve(fileName);
    if (Files.isDirectory(Path1_newDir)) {
    // 注意watchEvent.context()这个只有一个文件名(坑爹啊 为啥不给全路径)
    Path1_newDir.register(watchService,
    StandardWatchEventKinds.ENTRY_CREATE,
    StandardWatchEventKinds.ENTRY_DELETE);
    }

    }
    // 重置其关联的监控器
    WatchKey1.reset();

    }
    }

    }

     

  • 相关阅读:
    iOS应用程序间共享数据(转)
    解决右滑返回手势和UIScrollView中的手势冲突(转)
    (转)iOS被开发者遗忘在角落的NSException-其实它很强大
    iOS 身份证最后一位是X,输入17位后自动补全X(转)
    springboot单机秒杀之queue队列
    springboot单机秒杀-aop+锁
    springbot单机秒杀,锁与事务之间的大坑
    spring-cloud学习之4.微服务请求打通
    spring-cloud学习之3.使用feign实现负载均衡
    spring-cloud学习之2.搭建请求网关spring-cloud-getway
  • 原文地址:https://www.cnblogs.com/attilax/p/15197385.html
Copyright © 2020-2023  润新知