En lecture et en Écriture à un fichier simultanément en java
Je suis en train de lire un fichier ligne par ligne, et j'essaie de faire en sorte que si j'arrive à une ligne qui correspond à mon paramètres spécifiques (dans mon cas, s'il commence avec un certain mot), que je peux remplacer cette ligne.
Mon code actuel:
try {
FileInputStream fis = new FileInputStream(myFile);
DataInputStream in = new DataInputStream(fis);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
if (line.startsWith("word")) {
//replace line code here
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
...où myFile
est un File
objet.
Comme toujours, toute aide, exemples, ou des suggestions sont appréciés.
Merci!
Pourquoi ne pas lire le fichier en entier à la fois, le fermer, l'ouvrir pour l'écriture et puis écrire sur chaque ligne après l'exécution de la transformation?
Et si c'était un gros fichier?, alors ma méthode proposée fonctionnerait beaucoup mieux.
S'il vous plaît ne pas utiliser DataInputStream pour lire un texte, vanillajava.blogspot.co.royaume-uni/2012/08/...
Et si c'était un gros fichier?, alors ma méthode proposée fonctionnerait beaucoup mieux.
S'il vous plaît ne pas utiliser DataInputStream pour lire un texte, vanillajava.blogspot.co.royaume-uni/2012/08/...
OriginalL'auteur iphonedev7 | 2013-01-23
Vous devez vous connecter pour publier un commentaire.
Votre meilleur pari ici est susceptible d'être à lire dans le fichier en mémoire (quelque Chose comme un
StringBuilder
) et en écrivant ce que vous voulez de votre fichier de sortie à ressembler à laStringBuilder
. Après vous avez fini de lire dans le fichier, vous aurez alors voulez écrire le contenu de laStringBuilder
pour le fichier.Si le fichier est trop gros pour accomplir cela en mémoire, vous pouvez toujours lire le contenu du fichier ligne par ligne et de les écrire dans un fichier temporaire au lieu d'un
StringBuilder
. Après cela est fait, vous pouvez supprimer l'ancien fichier et déplacez le temporaire de l'un à sa place.OriginalL'auteur Marc Baumbach
RandomAccessFile semble un bon ajustement. Sa javadoc dit:
Cela dit, depuis le fichier texte est un fichier séquentiel format, vous ne pouvez pas remplacer une ligne par une ligne d'une longueur différente, sans déplacement de tous les personnages autour de, afin de remplacer les lignes en général, le montant de la lecture et de l'écriture de la totalité du fichier. Cela peut être plus facile à réaliser si vous écrivez dans un fichier séparé, et renommer le fichier de sortie une fois que vous avez terminé. C'est aussi plus robuste dans le cas où si quelque chose va mal, comme on peut simplement réessayer avec le contenu du fichier initial. Le seul avantage de RandomAccessFile est que vous n'avez pas besoin de l'espace disque et le fichier de sortie, et peuvent obtenir un léger mieux les performances du disque en raison d'un meilleur accès à la localité.
Ce doit être la accepté de répondre.
OriginalL'auteur meriton