Bonjour à tous,
J'aimerais savoir s'il était possible de lire un fichier ligne par ligne et en boucle, sans pour autant le refermer et le réouvrir à chaque fois?
Merci beaucoup.
Bonjour à tous,
J'aimerais savoir s'il était possible de lire un fichier ligne par ligne et en boucle, sans pour autant le refermer et le réouvrir à chaque fois?
Merci beaucoup.
Merci de consulter la FAQ:
http://java.developpez.com/faq/java/...eLigneParLigne
Je crois que ce qu'il demandait c'est si on pouvait garder le flux de lecture du fichier ouvert même si on est à la fin du fichier, ensuite un autre programme écrit dans le fichier, et cela fait une nouvelle ligne lue par le flux de lecture.
Il ne me semble pas que cela puisse fonctionner, il faut réouvrir le flux, ou sinon j'aurai pu optimiser mon programme qui fait la même chose (du polling)
C'est tout à fait possible de ne pas fermer le fichier. Par exemple pour simuler un "tail -f" :
Par contre bien sûr cela ne prend en compte que les modifs faite à la fin du fichier...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 BufferedReader br = new BufferedReader(new FileReader("c:\\in.txt")); try { while (true) { // On lit le fichier ligne par ligne : String line; while ( (line=br.readLine()) != null ) { System.out.println(line); } // On attend que de nouvelles données soit lisibles : while ( !br.ready() ) { // Avec une pause pour éviter de faire une boucle active : Thread.sleep(100); } } } finally { br.close(); }
a++
j'ajouterais, que, de mémoire, sous windows, avec les lock automatique sur les fichiers ouvert, ça empechera à un autre process d'ouvrir le fichier en écriture...
Non cela empêchera de le supprimer ou de le renommer, mais on pourra toujours écrire dedans...
Par contre cela peut bloquer certain programme qui utilise des fichiers temporaires et qui utilise le renommage lors de la sauvegarde...
De même, si on réécrit le fichier depuis le début on ne récupérera pas toutes les données, mais seulement celle à partir de l'emplacement où on était (à condition que le fichier soit plus long donc).
Sous Linux il est possible de supprimer/renommer un fichier pendant son utilisation, de mémoire :
- Si on renomme le fichier le mapping se fera toujours. En clair on continuera a lire dans le fichier avec le nouveau nom tant qu'on ne l'a pas fermé (c'est le même fichier).
- Si on le supprime on pourra continuer à lire dessus (mais il n'y aura plus rien), mais pas sur un éventuel fichier du même nom créé par la suite.
a++
Pour lever l'ambiguité de la phrase, il n'y aura plus de fichier (disparu), mais le programme qui l'a ouvert avant l'effacement continue à savoir lir tout ce qu'il y avait dedans. Le fichier est détaché du système de fichier mais pas encore libéré sur le disque. Ca se traduit comme çà dans un lsof:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 lsof | grep test.txt java 9080 delbd 3w REG 8,5 9555638 99166 /tmp/test.txt (deleted)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager