2009-10-27 15 views
6

Les communs FileUtils semblent assez cool, et je ne peux pas croire qu'ils ne peuvent pas être faits pour ajouter à un fichier.Peut apache FileUtils.writeLines() être fait pour ajouter à un fichier s'il existe

File file = new File(path); 
FileUtils.writeLines(file, printStats(new DateTime(), headerRequired)); 

ci-dessus remplace tout le contenu du fichier à chaque fois, et je voudrais juste garder le marquage ce genre de choses à la fin comme ce code fait.

fw = new FileWriter(file, true); 
try{ 
    for(String line : printStats(new DateTime(), headerRequired)){ 
     fw.write(line + "\n"); 
    } 
} 
finally{ 
    fw.close(); 
} 

J'ai cherché le javadoc mais je n'ai rien trouvé! Qu'est-ce que je rate?

Répondre

7

Vous pouvez utiliser IOUtils.writeLines(), il reçoit un objet Writer que vous pouvez initialiser comme dans votre deuxième exemple.

+0

donc je devrais mettre vrai dans les lignes "les lignes à écrire, les entrées nulles produisent des lignes vides"? – wizztjh

5

Leur méthode est maintenant comme appendString (...) dans la classe FileUtils.

Mais vous pouvez obtenir le fluxSortie de FileUtils.openOutputStream (...) et que écrire en utilisant

write(byte[] b, int off, int len) 

Vous pouvez calculte hors, de sorte que vous apend au fichier.

EDIT

Après avoir lu Davids réponse que je reconnaissais que le BufferedWriter fera ce travail pour vous

BufferedWriter output = new BufferedWriter(new FileWriter(simFile)); 
output.append(text); 
+1

Je voudrais également inclure un output.flush() pour écrire le flux dans le fichier. –

0

vous pourriez faire quelque chose comme

List x = FileUtils.readLines(file); 
x.add(String) 
FileUtils.writelines(file,x); 
+1

ouch: performance très dangereuse atteinte ici. – jayunit100

1

Au FileUtils apache 2.1 vous avez cette méthode:

écriture static void (fichier fichier, les données CharSequence, append booléenne)

1

Il y a un surcharge pour FileUtils.writelines() qui prend le paramètre sur s'il faut ajouter.

public static void writeLines(File file, 
      Collection<?> lines, 
      boolean append) 
        throws IOException 

fichier - le fichier à écrire à

lignes - les lignes d'écriture, les entrées nulles produisent des lignes vides

append - si vrai, les lignes seront ajoutées à la fin de la fichier plutôt que d'écraser

Cas1:

FileUtils.writeLine(file_to_write, "line 1"); 
FileUtils.writeLine(file_to_write, "line 2"); 

file_to_write volonté c Si vous écrivez d'abord plusieurs fois dans le même fichier plusieurs fois, le fichier sera écrasé.

Case2:

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 ajoutera au même fichier.

Cochez cette option dans 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)

+0

La simple publication d'un lien externe pour une réponse n'est pas appropriée pour SO. Essayez de l'expliquer. –

+1

Merci @sparky. C'est ainsi que la documentation officielle de Java était simple et explicite. Cependant édité ma réponse maintenant. – Kris