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?

Était-ce utile?

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top