gpt4 book ai didi

java - 读取另一个进程正在写入的文件

转载 作者:行者123 更新时间:2023-12-01 12:29:49 26 4
gpt4 key购买 nike

我有一个文件正在被另一个进程(完全不同的 pid)写入。我知道它正在逐行写入文件。

从 Java 中,我想在将行写入该文件时逐行读取该文件。 (或者尽可能接近这一点)。

与其重新发明轮子……Java 中是否已经有一种通用的方法可以实现这一目标?如果有一个名为 .readLine() 的阻塞函数就好了。

最佳答案

您可以使用 WatchService观察操作系统中的事件。

我更喜欢使用 take 的选项方法,因为它可以防止您的系统进行不必要的轮询并等待来自操作系统的事件。

我已经在 Windows、Linux 和 OSX 上成功使用了此功能 - 只要 Java 7 可用,因为这是自 JDK 1.7 以来的新功能。

这是我提出的解决方案 - 在与主线程不同的线程中运行,因为我不希望它阻塞我的 UI - 但这取决于您和您的应用程序架构。

boolean run = true;
WatchService watchService = FileSystems.getDefault().newWatchService();
Path watchingPath = Paths.get("path/to/your/directory/to/watch");
watchingPath.register(watchService, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY);

WatchKey key = null;
while(run && !isCancelled()) {
try {
key = watchService.take();
for(WatchEvent<?> event : key.pollEvents()) {
if(!isCancelled()) {
if(event.context().toString().equals(fileName)) {
//Your file has changed, do something interesting with it.
}
}
}
} catch (InterruptedException e) {
//Failed to watch for result file cahnges
//you might want to log this.
run = false;
} catch (ClosedWatchServiceException e1) {
run = false;
}

boolean reset = key.reset();
if(!reset) {
run = false;
}
}
<小时/>

另请参阅

关于java - 读取另一个进程正在写入的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26024758/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com