Émuler "tail -f" Unix en Java
La mise en œuvre de la fonctionnalité de l'utilitaire "tail -f" en Java implique de trouver un technique ou bibliothèque capable de surveiller un fichier pour les nouveaux ajouts et de permettre au programme de lire en permanence ces nouvelles lignes. Pour y parvenir, envisagez les approches suivantes :
Classe Apache Commons Tailer
Une option notable est la classe Tailer d'Apache Commons IO. Cette classe fournit une solution simple pour surveiller les fichiers et leurs modifications. Il permet la lecture continue des nouvelles lignes ajoutées au fichier, similaire au comportement de "tail -f". L'intégration avec la classe Tailer peut être réalisée à l'aide du code suivant :
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();
Implémentation de surveillance de fichiers personnalisée
Alternativement, on pourrait créer une implémentation de surveillance de fichiers personnalisée qui régulièrement vérifie les changements de taille de fichier et met à jour son tampon interne en conséquence. Cette approche nécessite une compréhension plus approfondie du comportement du système de fichiers et des mécanismes d'écoute des événements au sein de Java. Voici un exemple simplifié :
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 } } } }
Pour utiliser le moniteur personnalisé, créez une instance et exécutez-la en tant que thread. Il surveillera constamment les modifications apportées au fichier et mettra à jour le tampon en conséquence.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!