ファイル変更監視と読込をJavaで
java.nio.fileパッケージのWatchServiceクラスを使用してファイルの変更を監視し、BufferedReaderクラスを使用してファイルを読み取ることができます。
簡単なサンプルコードを以下に示します。
import java.io.BufferedReader;
import java.io.IOException;
import java.nio.file.*;
public class FileWatcherExample {
public static void main(String[] args) throws IOException, InterruptedException {
// 创建WatchService对象
WatchService watchService = FileSystems.getDefault().newWatchService();
// 注册监听的文件夹
Path directory = Paths.get("path/to/directory");
directory.register(watchService, StandardWatchEventKinds.ENTRY_MODIFY);
// 循环监听文件变化
while (true) {
WatchKey key;
try {
// 获取下一个文件变化的事件
key = watchService.take();
} catch (InterruptedException e) {
return;
}
// 处理文件变化的事件
for (WatchEvent<?> event : key.pollEvents()) {
WatchEvent.Kind<?> kind = event.kind();
// 过滤掉非修改事件
if (kind == StandardWatchEventKinds.ENTRY_MODIFY) {
@SuppressWarnings("unchecked")
WatchEvent<Path> pathEvent = (WatchEvent<Path>) event;
Path modifiedFile = pathEvent.context();
// 读取文件内容
try (BufferedReader reader = Files.newBufferedReader(directory.resolve(modifiedFile))) {
String line;
while ((line = reader.readLine()) != null) {
// 处理文件内容
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 重置WatchKey以接收更多的文件变化事件
boolean valid = key.reset();
if (!valid) {
break;
}
}
}
}
上記のコードでは、WatchServiceを使用してファイル監視器を作成し、register()メソッドを使用して監視対象のフォルダとイベントタイプを登録します。次に、無限ループを使用してファイル変更イベントの発生を待ちます。ループでは、take()メソッドを使用して次のファイル変更イベントのWatchKeyオブジェクトを取得し、WatchKeyオブジェクトのすべてのイベントを反復処理します。イベント処理ループでは、非変更イベントをフィルタリングし、Files.newBufferedReader()メソッドを使用して、変更されたファイルの内容を読み取るBufferedReaderオブジェクトを作成します。
「path/to/directory」は監視したい実際のフォルダへのパスに置き換える必要があることに注意してください。また、上記のコードではファイルの内容を読み込む部分のみを示しており、実際のニーズに応じて適切に処理する必要があります。