Comment lire un BufferedReader deux fois ou plusieurs fois?
J'ai un fichier texte avec un entier par ligne -
10
20
50
Je veux lire et imprimer ces chiffres deux fois ou peut-être même plusieurs fois. J'ai essayé un peu de code et il a échoué. Comment puis-je modifier mon code pour imprimer la liste deux fois ?
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.InputStreamReader;
public class DoubleBuffer {
public static void main(String[] args) {
try {
FileInputStream fstream = new FileInputStream("c:/files/numbers.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
String strLine;
//Read rows
while ((strLine = br.readLine()) != null) {
System.out.println(strLine);
}
//Read rows again
while ((strLine = br.readLine()) != null) {
System.out.println(strLine);
}
in.close();
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
}//try-catch
}//main
}//class
Soit de les stocker dans une liste ou redémarrer le tampon/
Si la mémoire n'est pas un problème " vous pouvez stocker la totalité de l'entrée comme une
Les ranger sur une liste serait l'idéal.
oui, fait sens. Re-lecture du fichier aurait besoin de deux fois le IO. Aussi, nous avons besoin d'utiliser la même mémoire deux fois pour stocker les lignes que nous lisons. Le droit ???
S'il vous plaît ne pas utiliser DataInputStream de lire le texte, aussi merci de le supprimer à partir de votre exemple, et cette mauvaise idée est copié souvent. vanillajava.blogspot.co.royaume-uni/2012/08/...
Si la mémoire n'est pas un problème " vous pouvez stocker la totalité de l'entrée comme une
byte[]
puis créer un ByteArrayInpuStream
en tant que de besoin.Les ranger sur une liste serait l'idéal.
oui, fait sens. Re-lecture du fichier aurait besoin de deux fois le IO. Aussi, nous avons besoin d'utiliser la même mémoire deux fois pour stocker les lignes que nous lisons. Le droit ???
S'il vous plaît ne pas utiliser DataInputStream de lire le texte, aussi merci de le supprimer à partir de votre exemple, et cette mauvaise idée est copié souvent. vanillajava.blogspot.co.royaume-uni/2012/08/...
OriginalL'auteur Use your head | 2013-06-24
Vous devez vous connecter pour publier un commentaire.
Maintenant, vous pouvez imprimer plusieurs fois.
S'il vous plaît ne pas utiliser DataInputStream de lire le texte, aussi merci de le supprimer à partir de votre exemple, et cette mauvaise idée est copié souvent. vanillajava.blogspot.co.royaume-uni/2012/08/...
merci pour l'entrée.
Ganesh - veuillez lire ce que Berryllium dit ci-dessous. "une structure de données est dans la mémoire de masse, et si vous avez de gros fichiers, vous pouvez exécuter dans une OutOfMemoryError. Si votre application est multi-thread, ce problème pourrait sortir plus tôt. Si vous utilisez une structure de données, vous avez imposé une limite sur la taille du fichier"
Je ne suis pas sûr que cette réponse doit être un wiki de la communauté. La solution fonctionne bien pour moi à cause de la petite taille de mes fichiers.
OriginalL'auteur
Vous pouvez utiliser
mark()
etreset()
ou il suffit d'ouvrir à nouveau le fichier. Selon votre utilisation, peut-être que vous voulez stocker les données dans la mémoire?De référence - http://docs.oracle.com/javase/6/docs/api/java/io/BufferedReader.html#reset%28%29
OriginalL'auteur Karthik T
Il y a une autre possibilité: Fixer les auditeurs à un
MultiReader
.à être utilisée comme ceci:
Si le fichier est lu une fois, et il peut gérer de gros fichiers, parce que le contenu du fichier n'est pas conservé dans la mémoire.
votre tête Il peut gérer de gros fichiers. Alors qu'une structure de données est dans la mémoire de masse, et si vous avez de gros fichiers, vous pouvez exécuter dans une
OutOfMemoryError
. Si votre application est multi-thread, ce problème pourrait sortir plus tôt. Si vous utilisez une structure de données, vous avez imposé une limite sur la taille du fichier.Comme pour sa complexité: C'est le même motif, si vous fixez un
ActionListener
à unJButton
- c'est un rappel. Il est probable que vous pouvez utiliser/trouver ce modèle dans beaucoup d'endroits.OriginalL'auteur Beryllium
OriginalL'auteur yousef
Lecture mêmes choses plusieurs fois conduire à une mauvaise performance...
Sauf si vous avez une très bonne raison de faire de multiples lectures, la lecture au début de la méthode principale et stocker les données dans une structure de données adéquate pour votre condition.
OriginalL'auteur anshrpr