Domanda

I beni comuni FileUtils sembra piuttosto interessante e non riesco a credere che non possano essere aggiunti ad un file.

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

Quanto sopra sostituisce ogni volta il contenuto del file e vorrei solo continuare a taggare questa roba per finire così come fa questo codice.

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

Ho cercato il javadoc ma non ho trovato nulla! Cosa mi sto perdendo?

È stato utile?

Soluzione

Puoi usare IOUtils.writeLines () , riceve un oggetto Writer che puoi inizializzare come nel tuo secondo esempio.

Altri suggerimenti

Il loro è ora un metodo come appendString (...) nella classe FileUtils.

Ma puoi ottenere Outputstream da FileUtils.openOutputStream (...) e poi scrivere su di esso usando

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

Puoi calcolare l'off, in modo da aggiungere il file.

Modifica

Dopo aver letto la risposta di Davids ho riconosciuto che BufferedWriter farà questo lavoro per te

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

A partire da apache FileUtils 2.1 hai questo metodo:

scrittura del vuoto statica (file file, dati CharSequence, append booleano)

Esiste un sovraccarico per FileUtils.writelines () che accetta i parametri su se aggiungere.

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

file: il file in cui scrivere

righe: le righe da scrivere, le voci null producono righe vuote

append: se vero, le righe verranno aggiunte alla fine del file anziché sovrascrivere

Caso 1:

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

file_to_write conterrà solo

line 2

Come prima scrittura nello stesso file più volte sovrascriverà il file.

Caso 2:

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

file_to_write conterrà

line 1
line 2

La seconda chiamata verrà aggiunta allo stesso file.

Controlla questo dalla documentazione ufficiale di Java per maggiori dettagli. https : //commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/FileUtils.html#writeLines (java.io.File , java.util.Collection, boolean)

potresti fare qualcosa del genere

List x = FileUtils.readLines(file);
x.add(String)
FileUtils.writelines(file,x);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top