在java中轮询一个文件,将最新写入的文件内容获取为字符串



我想创建一个java程序,它可以无限轮询日志文件。每当日志文件中有一些条目时,我都想将最新的内容读取到刚刚写入的文件中。

有人能告诉我做这件事的有效方法吗?因为这应该全天候运行,所以不希望获得cpu峰值。

我做了基础研究,发现了以下几点,但帮助不大:https://blogs.oracle.com/thejavatutorials/entry/watching_a_directory_for_changes

实现这一点的一种非常简单有效的方法是使用WatchService。下面是一个代码示例,当文件被CREATED、MODIFIED和DELETED时,它会引发事件。

import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardWatchEventKind;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
import java.util.List;
public static void main(String[] args) {
    //define a folder root
    Path myDir = Paths.get("D:/data");       
    try {
       WatchService watcher = myDir.getFileSystem().newWatchService();
       myDir.register(watcher, StandardWatchEventKind.ENTRY_CREATE, 
       StandardWatchEventKind.ENTRY_DELETE, StandardWatchEventKind.ENTRY_MODIFY);
       WatchKey watckKey = watcher.take();
       List<WatchEvent<?>> events = watckKey.pollEvents();
       for (WatchEvent event : events) {
            if (event.kind() == StandardWatchEventKind.ENTRY_CREATE) {
                System.out.println("Created: " + event.context().toString());
            }
            if (event.kind() == StandardWatchEventKind.ENTRY_DELETE) {
                System.out.println("Delete: " + event.context().toString());
            }
            if (event.kind() == StandardWatchEventKind.ENTRY_MODIFY) {
                System.out.println("Modify: " + event.context().toString());
            }
        }
    } catch (Exception e) {
        System.out.println("Error: " + e.toString());
    }
}

相关内容

  • 没有找到相关文章

最新更新