检测目录中添加或修改的现有文件的新文件

时间:2019-12-13 06:08:12

标签: java servlet-3.0

另一台机器中有一个servlet java应用程序,其目录和文件带有子目录。现在,如果在这些目录中添加了新的文本行或新文件。我想在发生任何更改时退出。对于实现Java应用程序的任何想法,将不胜感激

2 个答案:

答案 0 :(得分:0)

要执行此过程,您需要Schedule,并且为此有很多API。在下面的示例中,我将使用java.util.concurrent库。(java 5)

1-安排流程:

    public class BeeperControl {

        private static final ScheduledExecutorService scheduler =
                Executors.newScheduledThreadPool(1);

        public static void beepForAnHour() {
            final Runnable beeper = new Runnable() {
                public void run() { 
                           // do your stuff here
                        System.out.println("beep"); }
            };
            final ScheduledFuture<?> beeperHandle =
                    scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS);
            scheduler.schedule(new Runnable() {
                public void run() { beeperHandle.cancel(true); }
            }, 60 * 60, SECONDS);
        }


    public static void main(String... args){

        beepForAnHour();
    }
}

2-观看D:\ Temp下文件的创建,删除,移动和重命名,并且应该可以让您了解所需内容:

public class Foo3
{
    public static void main(String[] args) throws Exception
    {
        FileSystem fs = FileSystems.getDefault();
        WatchService ws = fs.newWatchService();
        Path pTemp = Paths.get("D:/Temp");
        pTemp.register(ws, new WatchEvent.Kind[] {ENTRY_MODIFY, ENTRY_CREATE, ENTRY_DELETE}, FILE_TREE);
        while(true)
        {
            WatchKey k = ws.take();
            for (WatchEvent<?> e : k.pollEvents())
            {
                Object c = e.context();
                System.out.printf("%s %d %s\n", e.kind(), e.count(), c);
            }
            k.reset();
        }
    }
}

1-安排流程Reference1

2-观看创建Reference2

希望获得帮助。

答案 1 :(得分:0)

我们了解您的问题陈述,因此您应该在WatchService软件包中放入java.nioWatchService允许注册目录和任意数量的全局模式。此类将负责过滤,并且仅发出您感兴趣的事件。

DirectoryWatchService watchService = new SimpleDirectoryWatchService(); // May throw
watchService.register( // May throw
        new DirectoryWatchService.OnFileChangeListener() {
            @Override
            public void onFileCreate(String filePath) {
                // File created
            }

            @Override
            public void onFileModify(String filePath) {
                // File modified
            }

            @Override
            public void onFileDelete(String filePath) {
                // File deleted
            }
        },
        <directory>, // Directory to watch
        <file-glob-pattern-1>, // E.g. "*.log"
        <file-glob-pattern-2>, // E.g. "input-?.txt"
        ... // As many patterns as you like
);

watchService.start();

有关完整的解决方案,您可以参考GitHub回购