the Java FileWriter class, java.io.FileWriter
, makes it possible to write characters to a file. A este respeito, o texto Java FileWriter funciona muito como o FileOutputStream
exceto que um FileOutputStream
é baseado em byte, enquanto que um FileWriter
é baseado em caracteres. O FileWriter
destina-se a escrever texto, em outras palavras. Um caractere pode corresponder a um ou mais bytes, dependendo do esquema de codificação de caracteres em uso. A classe Java FileWriter
é uma subclasse da classe Java Writer, a propósito.
exemplo de redacção
aqui está um simples Java FileWriter
exemplo:
Writer fileWriter = new FileWriter("data\filewriter.txt");fileWriter.write("data 1");fileWriter.write("data 2");fileWriter.write("data 3");fileWriter.close();
Nota: O tratamento adequado das excepções foi ignorado aqui por uma questão de clareza. Para saber mais sobre o manuseio correto de exceções, consulte Java IO.
o FileWriter
tem outros construtores também, permitindo que você especifique o arquivo para escrever de maneiras diferentes. Procure no JavaDoc oficial informações mais detalhadas.
sobrepor vs. adicionar o ficheiro
quando criar um Java FileWriter
poderá decidir se deseja sobrepor QUALQUER ficheiro existente com o mesmo nome, ou se deseja adicionar a qualquer ficheiro existente. Você decide isso escolhendo o que FileWriter
construtor você usa.
O FileWriter
construtor tomar apenas um parâmetro, o nome do arquivo, irá substituir qualquer arquivo existente:
Writer fileWriter = new FileWriter("c:\data\output.txt");
FileWriter
tem um construtor que recebe 2 parâmetros: O nome do arquivo e um valor booleano. O booleano indica se deve adicionar ou sobrepor um ficheiro existente. Aqui estão duas Java FileWriter
exemplos mostrando que:
Writer fileWriter = new FileWriter("c:\data\output.txt", true); //appends to fileWriter fileWriter = new FileWriter("c:\data\output.txt", false); //overwrites file
FileWriter Codificação de Caracteres
O FileWriter
assume que você deseja codificar os bytes para o arquivo usando o padrão de codificação de caracteres para o computador o aplicativo é executado. Isto pode nem sempre ser o que você quer, e você não pode mudá-lo!
se quiser indicar um esquema de codificação de caracteres diferente, não use um FileWriter
. Utilize um OutputStreamWriter
num FileOutputStream
em vez disso. O OutputStreamWriter
permite-lhe indicar o esquema de codificação de caracteres a usar ao escrever os ‘bytes’ no ficheiro subjacente.
write (int)
the Java FileWriter
write(int)
method writes the lower 16 bit of the int
to the destination the FileWriter
is connected to, as a single character. Aqui está um exemplo de escrever um único caractere em um Java FileWriter
:
FileWriter fileWriter = new FileWriter("data/output.txt");fileWriter.write('A');
write (char)
the Java FileWriter
also has a write(char)
method which can write an array of characters to the destination the FileWriter
is connected to. O método write(char)
devolve o número de caracteres efectivamente escritos para o FileWriter
. Aqui está um exemplo de escrever um array de caracteres para um Java FileWriter
:
FileWriter fileWriter = new FileWriter("data/output.txt");char chars = new char{'A','B','C','D','E'};fileWriter.write(chars);
Write Performance
It is faster to write an array of characters to a Java FileWriter than writing one character at a time. O speedup pode ser bastante significativo – até 10 x maior ou mais. Assim, recomenda-se a utilização dos métodos write(char)
sempre que possível.
a velocidade exata que você obtém depende do so subjacente e hardware do computador em que você executa o código Java. O aumento de velocidade depende de questões como a velocidade da memória, a velocidade do disco rígido e tamanhos de buffer, etc.
buffer transparente via BufferedWriter
você pode obter buffer transparente de bytes escritos em um Java FileWriter
embrulhando – o em um buffer Java BufferedWriter . Todos os bytes escritos no BufferedWriter
serão primeiro tamponados dentro de um conjunto interno de bytes no BufferedWriter
. Quando o buffer estiver cheio, o buffer é lavado para o subjacente FileWriter
tudo de uma vez. Aqui está um exemplo de moldagem de um Java FileWriter
em um BufferedWriter
:
int bufferSize = 8 * 1024;Writer writer = new BufferedWriter( new FileWriter("c:\data\output-file.txt"), bufferSize );
Você pode ler mais sobre o BufferedWriter
no meu BufferedWriter tutorial.
flush ()
the Java FileWriter
‘s flush()
method flushes all data written to the FileWriter
to the underlying file. Os dados podem ser tamponados na memória do sistema operacional em algum lugar, mesmo que o seu código Java o tenha escrito para o FileWriter
. Ao chamar flush()
você pode garantir que quaisquer dados tamponados serão despejados (escritos) no disco. Aqui está um exemplo de flushing dados escritos em um Java FileWriter
chamando seu método flush()
:
fileWriter.flush();
fechando um escrito de arquivo
quando você terminar de escrever caracteres para um Java FileWriter
você deve lembrar-se de fechá-lo. Fechar um FileWriter
é feito chamando seu método close()
. Aqui está o aspecto de fechar um Java FileWriter
:
fileWriter.close();
Você também pode usar a construção de tentativa-com-recursos introduzida no Java 7. Aqui está como usar e fechar uma aparência FileWriter
com a construção de tentativa-com-recursos:
try(FileWriter fileWriter = new FileWriter("data\filewriter.txt") ){ fileWriter.write("data 1"); fileWriter.write("data 2"); fileWriter.write("data 3");}