Java FileWriter

A classe Java FileWriter, java.io.FileWriter, torna possível escrever caracteres em um arquivo. A esse respeito o Java FileWriter funciona muito parecido com o FileOutputStream, excepto que um FileOutputStream é baseado em bytes, enquanto que um FileWriter é baseado em caracteres. O FileWriter destina-se a escrever texto, por 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.

FileWriter Example

Aqui está um Java simples FileWriter example:

Writer fileWriter = new FileWriter("data\filewriter.txt");fileWriter.write("data 1");fileWriter.write("data 2");fileWriter.write("data 3");fileWriter.close();

Nota: O tratamento de exceções apropriado foi pulado aqui por uma questão de clareza. Para aprender mais sobre o correto tratamento de exceções, vá para Java IO Exception Handling.

O FileWriter tem outros construtores também, permitindo que você especifique o arquivo para escrever de diferentes maneiras. Procure no JavaDoc oficial para informações mais detalhadas.

Overwriting vs. Appending the File

Quando você cria um Java FileWriter você pode decidir se quer sobrescrever qualquer arquivo existente com o mesmo nome, ou se você quer anexar a qualquer arquivo existente. Você decide que ao escolher o que FileWriter construtor que usa.

O FileWriter construtor que toma apenas um parâmetro, o nome do ficheiro, irá sobrescrever qualquer ficheiro existente:

Writer fileWriter = new FileWriter("c:\data\output.txt");

FileWriter tem um construtor que toma também 2 parâmetros: O nome do ficheiro e um booleano. O booleano indica se deve anexar ou sobrescrever um ficheiro existente. Aqui estão dois exemplos de Java FileWriter 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 Character Encoding

O FileWriter assume que você quer codificar os bytes para o arquivo usando a codificação de caracteres padrão para o computador em que sua aplicação está rodando. Isto pode não ser sempre o que você quer, e você não pode mudá-lo!

Se você quer especificar um esquema de codificação de caracteres diferente, não use um FileWriter. Use um OutputStreamWriter num FileOutputStream em vez disso. O OutputStreamWriter permite-lhe especificar o esquema de codificação de caracteres a utilizar quando escreve bytes no ficheiro subjacente.

write(int)

O método Java FileWriter write(int) escreve os 16 bits inferiores do int para o destino ao qual o FileWriter está ligado, como um único caractere. Aqui está um exemplo de escrita de um único caractere para um Java FileWriter:

FileWriter fileWriter = new FileWriter("data/output.txt");fileWriter.write('A');

write(char)

O Java FileWriter também tem um método write(char) que pode escrever um array de caracteres para o destino ao qual o FileWriter está conectado. O método write(char) retorna o número de caracteres realmente escritos para o FileWriter. Aqui está um exemplo de escrita de 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);

Performance de escrita

É mais rápido escrever um array de caracteres para um FileWriter Java do que escrever um caractere de cada vez. A velocidade pode ser bastante significativa – até 10 x superior ou mais. Portanto é recomendado usar os métodos write(char) sempre que possível.

A velocidade exacta que obtém depende do SO e hardware subjacente do computador em que corre o código Java. A velocidade depende de questões como velocidade da memória, velocidade do disco rígido e tamanhos de buffer etc.

Buffering transparente via BufferedWriter

Você pode obter um buffer transparente de bytes escritos em um Java FileWriter envolvendo-o em um Java BufferedWriter . Todos os bytes escritos em BufferedWriter serão primeiro armazenados em buffer dentro de um array de bytes interno em BufferedWriter. Quando o buffer está cheio, o buffer é enxaguado para o subjacente FileWriter todos de uma só vez. Aqui está um exemplo de embrulho 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 tutorial BufferedWriter.

flush()

O método Java FileWriter‘s flush() descarrega todos os dados escritos no FileWriter para o arquivo subjacente. Os dados podem ser armazenados em buffer na memória do SO em algum lugar, mesmo que seu código Java os tenha escrito no arquivo FileWriter. Chamando flush() você pode assegurar que qualquer dado armazenado em buffer será descarregado (gravado) para o disco. Aqui está um exemplo de descarga de dados escritos para um Java FileWriter chamando seu flush() método:

fileWriter.flush();

Closing a FileWriter

Quando você terminar de escrever caracteres para um Java FileWriter você deve se lembrar de fechá-lo. Fechar um FileWriter é feito chamando o seu método de close(). Aqui está como fechar um Java FileWriter parece:

fileWriter.close();

Você também pode usar a construção try-with-resources introduzida no Java 7. Aqui está como usar e fechar um FileWriter aspecto com a construção try-with-resources:

try(FileWriter fileWriter = new FileWriter("data\filewriter.txt") ){ fileWriter.write("data 1"); fileWriter.write("data 2"); fileWriter.write("data 3");}

Leave a Reply