Meniru Unix "tail -f" dalam Java
Melaksanakan kefungsian utiliti "tail -f" dalam Java melibatkan pencarian yang berkesan teknik atau perpustakaan yang mampu memantau fail untuk penambahan baharu dan membenarkan program membaca baris baharu ini secara berterusan. Untuk mencapai matlamat ini, pertimbangkan pendekatan berikut:
Kelas Tailer Apache Commons
Pilihan yang ketara ialah kelas Tailer daripada Apache Commons IO. Kelas ini menyediakan penyelesaian yang mudah untuk memantau fail dan pengubahsuaiannya. Ia membolehkan pembacaan berterusan baris baharu yang ditambahkan pada fail, serupa dengan kelakuan "tail -f". Penyepaduan dengan kelas Tailer boleh dicapai menggunakan kod berikut:
Tailer tailer = Tailer.create(new File("application.log"), new TailerListener() { @Override public void handle(String line) { // Perform desired operations on the newly added line } }); tailer.run();
Pelaksanaan Pemantauan Fail Tersuai
Sebagai alternatif, seseorang boleh membuat pelaksanaan pemantauan fail tersuai yang kerap menyemak perubahan saiz fail dan mengemas kini penimbal dalamannya dengan sewajarnya. Pendekatan ini memerlukan pemahaman yang lebih mendalam tentang tingkah laku sistem fail dan mekanisme mendengar peristiwa dalam Java. Berikut ialah contoh ringkas:
import java.io.File; import java.io.IOException; import java.nio.file.*; import java.nio.file.attribute.BasicFileAttributes; public class TailFileMonitor implements Runnable { private File file; private long lastFileSize; public TailFileMonitor(File file) { this.file = file; this.lastFileSize = file.length(); } @Override public void run() { Path filePath = file.toPath(); try { WatchKey watchKey = filePath.getParent().register(new WatchService(), StandardWatchEventKinds.ENTRY_MODIFY); while (true) { WatchKey key = watchKey.poll(); if (key == watchKey) { for (WatchEvent<?> event : key.pollEvents()) { WatchEvent.Kind<?> kind = event.kind(); if (kind == StandardWatchEventKinds.ENTRY_MODIFY && event.context().toString().equals(file.getName())) { tailFile(); } } } key.reset(); } } catch (IOException e) { // Handle IO exceptions } } private void tailFile() { long currentFileSize = file.length(); if (currentFileSize != lastFileSize) { try (BufferedReader br = new BufferedReader(new FileReader(file))) { br.skip(lastFileSize); String line; while ((line = br.readLine()) != null) { // Process newly added lines } lastFileSize = currentFileSize; } catch (IOException e) { // Handle IO exceptions } } } }
Untuk menggunakan monitor tersuai, buat tika dan laksanakannya sebagai urutan. Ia akan sentiasa memantau fail untuk perubahan dan mengemas kini penimbal dengan sewajarnya.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Fungsi 'tail -f' Unix di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!