java程序监视目录

前端之家收集整理的这篇文章主要介绍了java程序监视目录前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

嘿家伙我想创建一个程序,24/7监视一个目录,如果一个新文件添加到它,那么如果文件大于10mb,它应该排序.我已经实现了我的目录的代码,但我不知道如何在每次添加新记录时检查目录,因为它必须以连续的方式发生.

import java.io.*;
import java.util.Date;

public class FindingFiles {

    public static void main(String[] args) throws Exception {

        File dir = new File("C:\\Users\\Mayank\\Desktop\\java princeton");// Directory that contain the files to be searched 
        File[] files= dir.listFiles();
        File des=new File("C:\\Users\\Mayank\\Desktop\\newDir");  // new directory where files are to be moved 

        if(!des.exists())
        des.mkdir();

        for(File f : files ){
            long diff = new Date().getTime() - f.lastModified();

            if( (f.length() >= 10485760) || (diff > 10 * 24 * 60 * 60 * 1000) )
            {
                f.renameTo(new File("C:\\Users\\mayank\\Desktop\\newDir\\"+f.getName()));

            }  }  
}
}
最佳答案
手表服务应符合您的需求:https://docs.oracle.com/javase/tutorial/essential/io/notification.html

以下是实施监视服务所需的基本步骤:

>为文件系统创建WatchService“观察者”.@H_301_17@>对于要监视的每个目录,请将其注册到观察程序.注册目录时,您可以指定要通知的事件类型.您为每个注册的目录收到一个WatchKey实例.@H_301_17@>实现无限循环以等待传入事件.当事件发生时,密钥将发出信号并放入观察者的队列中.@H_301_17@从观察者的队列中检索密钥.您可以从密钥中获取文件名.@H_301_17@>检索密钥的每个待处理事件(可能有多个事件)并根据需要进行处理.@H_301_17@>重置密钥,然后继续等待事件.@H_301_17@>关闭服务:当线程退出关闭时(通过调用关闭方法),监视服务退出.

作为旁注,您应该支持自Java 7以来可用的java.nio包来移动文件.

renameTo()有一些严重的限制(从Javadoc中提取):

Many aspects of the behavior of this method are inherently@H_301_17@ platform-dependent: The rename operation might not be able to move a@H_301_17@ file from one filesystem to another,it might not be atomic,and it@H_301_17@ might not succeed if a file with the destination abstract pathname@H_301_17@ already exists. The return value should always be checked to make sure@H_301_17@ that the rename operation was successful.

例如,在Windows上,如果目标目录存在,renameTo()可能会失败,即使它是空的.@H_301_17@此外,该方法可能在失败时返回布尔值而不是异常.@H_301_17@通过这种方式,可能很难猜测问题的根源并在代码中处理它.

这是一个执行您的需求的简单类(它处理所有步骤,但不一定需要Watch Service关闭).

package watch;

import static java.nio.file.StandardWatchEventKinds.ENTRY_CREATE;

import java.io.File;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class WatchDir {

    private final WatchService watcher;
    private final Map
原文链接:https://www.f2er.com/java/437383.html

猜你在找的Java相关文章