Rumah > Java > javaTutorial > Bagaimana untuk Melaksanakan Fungsi 'tail -f' Unix di Jawa?

Bagaimana untuk Melaksanakan Fungsi 'tail -f' Unix di Jawa?

Mary-Kate Olsen
Lepaskan: 2024-12-04 18:15:14
asal
327 orang telah melayarinya

How to Implement Unix

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();
Salin selepas log masuk

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
            }
        }
    }
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan