Pode apache FileUtils.writeLines () ser feita para acrescentar um arquivo se ele existir
-
06-07-2019 - |
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?
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);