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"替換為要監聽的實際文件夾的路徑。此外,上述代碼只演示了讀取文件內容的部分,您需要根據實際需求進行相應的處理。