【工具】JAVA监听本地目录以及遇到的问题及解决方案

【工具】JAVA监听本地目录以及遇到的问题及解决方案

监听目录

依赖

        <!--hutool具包-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.4.M1</version>
        </dependency>

代码 直接执行main方法即可监听



import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.file.FileReader;
import cn.hutool.core.io.watch.SimpleWatcher;
import cn.hutool.core.io.watch.WatchMonitor;
import cn.hutool.core.io.watch.Watcher;
import cn.hutool.core.io.watch.watchers.DelayWatcher;
import cn.hutool.core.lang.Console;
import cn.hutool.core.util.StrUtil;
import lombok.extern.slf4j.Slf4j;

import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.WatchEvent;

@Slf4j
public class NewsDirectoryListener {

    private static final String 监听目录 = "C:\\workspace\\file";
    private static final Long 监听延迟毫秒 = 0l;
    
    private static WatchMonitor watchMonitor = null;

    public static void main(String[] args) {


        NewsDirectoryListener.监听目录();
//        NewsDirectoryListener.监听文件夹全部事件();
        
    }
    
    
    public static void 监听目录(){

        Watcher watcher = new Watcher() {
            @Override
            public void onCreate(WatchEvent<?> event, Path currentPath) {
                Object obj = event.context();
                Console.log("创建:{}-> {}", currentPath, obj);

                String 文件全称 = obj.toString();
                
                String 文件路径 = StrUtil.format("{}//{}", currentPath, 文件全称);
                
                
                
                
                NewsDirectoryListener.处理文件(文件路径);
                
                
                
            }

            @Override
            public void onModify(WatchEvent<?> event, Path currentPath) {
                Object obj = event.context();
                Console.log("修改:{}-> {}", currentPath, obj);
            }

            @Override
            public void onDelete(WatchEvent<?> event, Path currentPath) {
                Object obj = event.context();
                Console.log("删除:{}-> {}", currentPath, obj);
            }

            @Override
            public void onOverflow(WatchEvent<?> event, Path currentPath) {
                Object obj = event.context();
                Console.log("Overflow:{}-> {}", currentPath, obj);
            }
        };

        //这里只监听文件或目录的修改事件
        watchMonitor = WatchMonitor.create(NewsDirectoryListener.监听目录,
                WatchMonitor.ENTRY_CREATE);
//                new DelayWatcher(watcher, NewsDirectoryListener.监听延迟毫秒));

        watchMonitor.setWatcher(watcher);
        
        //设置监听目录的最大深入,目录层级大于制定层级的变更将不被监听,默认只监听当前层级目录
        watchMonitor.setMaxDepth(3);
        
        //启动监听
        watchMonitor.start();


    }

    public static void 监听文件夹全部事件(){


        WatchMonitor.createAll(NewsDirectoryListener.监听目录, new SimpleWatcher(){
            @Override
            public void onModify(WatchEvent<?> event, Path currentPath) {

                Object obj = event.context();
                
                Console.log("EVENT modify  -->  {}\\{}", currentPath, obj);
            }
        }).setMaxDepth(3).start();
        
    }
    
    
    
    
    public static boolean 处理文件(String 文件路径){


        boolean 是否文件 = FileUtil.isFile(文件路径);
        
        if(!是否文件){

            try {
                //重新注册这个新目录
                watchMonitor.registerPath(Paths.get(文件路径), 3);
            }catch (Exception e){
                e.printStackTrace();
            }
            
            return false;
        }

        //默认UTF-8编码,可以在构造中传入第二个参数做为编码
        FileReader fileReader = new FileReader(文件路径);
        String result = fileReader.readString();
        log.info(fileReader.getFile().getPath());
        if(StrUtil.isBlank(result)){
            return false;
        }
        
        
//        log.info(result);
        
        //调用接口 将信息传过去
        
        
        
        
        return true;
    }
    
    
}

问题:

在目录里新建文件夹后监听不到新文件夹的问题

监听不到新文件夹

解决方案,注册这个新目录到监听

if(!是否文件){

            try {
                //重新注册这个新目录
                watchMonitor.registerPath(Paths.get(文件夹路径), 3);
            }catch (Exception e){
                e.printStackTrace();
            }
            
            return false;
        }

参考文档

文件监听-WatchMonitor (hutool.cn)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是Superman丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值