Apache FileUtils.writeLines () peut-il être ajouté à un fichier s'il existe?
-
06-07-2019 - |
Question
Les communs FileUtils l'air plutôt cool, et je ne peux pas croire qu'ils ne puissent pas être ajoutés à un fichier.
File file = new File(path);
FileUtils.writeLines(file, printStats(new DateTime(), headerRequired));
Ce qui précède remplace simplement le contenu du fichier à chaque fois, et je voudrais juste continuer à baliser ce truc pour qu'il se termine exactement comme le fait ce code.
fw = new FileWriter(file, true);
try{
for(String line : printStats(new DateTime(), headerRequired)){
fw.write(line + "\n");
}
}
finally{
fw.close();
}
J'ai fouillé le javadoc mais rien trouvé! Qu'est-ce qui me manque?
La solution
Vous pouvez utiliser IOUtils.writeLines () , il reçoit un objet Writer que vous pouvez initialiser comme dans votre deuxième exemple.
Autres conseils
Leur méthode est maintenant semblable à appendString (...) dans la classe FileUtils.
Mais vous pouvez obtenir le flux de sortie à partir de FileUtils.openOutputStream (...) et y écrire en utilisant
write(byte[] b, int off, int len)
Vous pouvez calculer le nombre de points pour pouvoir s’ajouter au fichier.
MODIFIER
Après avoir lu la réponse de Davids, j'ai reconnu que BufferedWriter se chargerait de ce travail pour vous
BufferedWriter output = new BufferedWriter(new FileWriter(simFile));
output.append(text);
À partir d’apache FileUtils 2.1, vous avez cette méthode:
écriture statique vide (fichier, données CharSequence, booléen ajouté)
Il y a une surcharge pour FileUtils.writelines () qui prend le paramètre sur l'ajout ou non.
public static void writeLines(File file,
Collection<?> lines,
boolean append)
throws IOException
fichier - le fichier dans lequel écrire
lignes - les lignes à écrire, les entrées nulles produisent des lignes vides
append - si true, les lignes seront ajoutées à la fin du fichier plutôt que de les remplacer
Cas 1:
FileUtils.writeLine(file_to_write, "line 1");
FileUtils.writeLine(file_to_write, "line 2");
fichier_à_écrire ne contiendra que
line 2
La première écriture sur le même fichier à plusieurs reprises écrasera le fichier.
Cas 2:
FileUtils.writeLine(file_to_write, "line 1");
FileUtils.writeLine(file_to_write, "line 2", true);
file_to_write contiendra
line 1
line 2
Le deuxième appel sera ajouté au même fichier.
Consultez la documentation officielle de Java pour plus de détails. https : //commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/FileUtils.html#writeLines (java.io.File , java.util.Collection, boolean)
vous pourriez faire quelque chose comme
List x = FileUtils.readLines(file);
x.add(String)
FileUtils.writelines(file,x);