Pergunta

Os commons FileUtils olhar muito legal, e eu não posso acreditar que não pode ser feita para acrescentar a um arquivo.

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

A descrição acima apenas substitui o conteúdo do arquivo de cada vez, e eu gostaria apenas de manter a marcação este material para terminar apenas como este código faz.

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

Eu procurei o javadoc mas não encontrou nada! O que eu estou ausente?

Foi útil?

Solução

Você pode usar IOUtils.writeLines () , ele recebe um objeto escritor que você pode inicializar como em seu segundo exemplo.

Outras dicas

A sua é agora método como appendString (...) na classe FileUtils.

Mas você pode obter a OutputStream de FileUtils.openOutputStream (...) e de gravação a ele usando

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

Você pode calculte o fora, de modo que você vai apend para o arquivo.

Editar

Depois de ler Davids responder i reconheceu que a BufferedWriter vai fazer este trabalho para você

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

Como de apache FileUtils 2.1 você tem esse método:

gravar static void (arquivo de arquivo, dados CharSequence, boolean append)

Há uma sobrecarga para FileUtils.writelines () que leva parâmetro sobre a possibilidade de acréscimo.

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

arquivo - o arquivo para gravar

linhas - as linhas a escrever, entradas nulas produzir linhas em branco

anexar - se for verdade, então as linhas serão adicionadas ao final do arquivo em vez de substituir

Case1:

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

file_to_write conterá somente

line 2

Como primeira escrita para o mesmo arquivo várias vezes irá substituir o arquivo.

Caso 2:

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

file_to_write conterá

line 1
line 2

A segunda chamada vai acrescentar para o mesmo arquivo.

Verifique isso java documentação oficial para mais detalhes. https : //commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/FileUtils.html#writeLines (java.io.File , java.util.Collection, boolean)

você poderia fazer algo como

List x = FileUtils.readLines(file);
x.add(String)
FileUtils.writelines(file,x);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top