Exemplo de Java FileWriter

Java FileWriter

  • A classe FileWriter do Java faz parte do pacote java.io.
  • O FileWriter é uma subclasse da classe java.io.OutputStreamWriter.
  • O FileWriter é destinado a escrever fluxos de caracteres.
  • O FileWriter é usado para escrever em arquivos de caracteres. Seus métodos write() permitem que você escreva caractere(s) ou strings em um arquivo.
  • Os FileWriters geralmente são encapsulados por objetos Writer de nível mais alto, como BufferedWriter ou PrintWriter, que oferecem melhor desempenho e métodos mais flexíveis de nível superior para escrever dados.

Construtores do FileWriter

  1. FileWriter(File file): Cria um objeto FileWriter usando o objeto File especificado. Ele lança um IOException se o arquivo existir, mas for um diretório em vez de um arquivo regular, ou se não existir, mas não puder ser criado, ou não puder ser aberto por qualquer outro motivo.
  2. FileWriter(File file, boolean append): Cria um objeto FileWriter usando o objeto File especificado. Se o segundo argumento for verdadeiro, então os bytes serão escritos no final do arquivo em vez do início. Ele lança uma IOException se o arquivo existir, mas for um diretório em vez de um arquivo regular, ou se não existir, mas não puder ser criado, ou se não puder ser aberto por qualquer outro motivo.
  3. FileWriter(FileDescriptor fd): Cria um objeto FileWriter associado ao descritor de arquivo especificado.
  4. FileWriter(String fileName): Cria um objeto FileWriter usando o fileName especificado. Ele lança uma IOException se o arquivo com o nome especificado existir, mas for um diretório em vez de um arquivo regular, ou se não existir, mas não puder ser criado, ou se não puder ser aberto por qualquer outro motivo.
  5. FileWriter(String fileName, boolean append): Cria um objeto FileWriter usando o fileName especificado com um booleano indicando se deve ou não anexar os dados escritos. Se o segundo argumento for verdadeiro, então os dados serão escritos no final do arquivo em vez do início. Ele lança uma IOException se o arquivo com o nome especificado existir, mas for um diretório em vez de um arquivo regular, ou se não existir, mas não puder ser criado, ou se não puder ser aberto por qualquer outro motivo.

Exemplo de Java FileWriter

FileWriter herda o método das classes java.io.OutputStreamWriter e java.io.Writer. Vamos dar uma olhada nos métodos abaixo com exemplos.

write(int c)

Este método escreve um único caractere especificado por int c.

package com.journaldev.io.filewriter;

import java.io.FileWriter;
import java.io.IOException;

/**
 * Java write file using FileWriter write method
 * 
 * @author pankaj
 *
 */
public class FileWriterWriteIntExample {

	public static void main(String[] args) {
		FileWriter fileWriter = null;
		try {
			fileWriter = new FileWriter("D:/data/file.txt");
			// método herdado de java.io.OutputStreamWriter 
			fileWriter.write(65);
			fileWriter.write(66);
			fileWriter.write(67);
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			try {
				if (fileWriter != null) {
					fileWriter.flush();
					fileWriter.close();					
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

FileWriter implementa a interface AutoCloseable, portanto, podemos usar try com recursos ao usar a classe FileWriter.

package com.journaldev.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file using FileWriter write method using try with resource
 * 
 * @author pankaj
 *
 */
public class FileWriterWriteIntTryWithResource {

	public static void main(String[] args) {
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			// método herdado de java.io.OutputStreamWriter 
			fileWriter.write(65);
			fileWriter.write(66);
			fileWriter.write(67);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

Nota: No programa acima, fileWriter.write(65) escreverá A no arquivo porque 65 é o valor decimal para o caractere A, portanto, o inteiro 65 será convertido em caractere A, o mesmo para os outros.

write(String str, int off, int len)

Este método escreve uma parte da String str de int off até int len.

  • str: String a ser escrita
  • off: Deslocamento a partir do qual começar a ler caracteres
  • len: Número de caracteres a serem escritos

Se o valor do parâmetro len for negativo, então nenhum caractere será escrito.

package com.journaldev.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file using FileWriter write(String  s,  int  off,  int  len) method
 * 
 * @author pankaj
 *
 */
public class FileWriterWriteStringExample {

	public static void main(String[] args) {
		String data = "This is FileWriter Example.";
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			// método herdado de java.io.OutputStreamWriter 
			fileWriter.write(data, 8, 10);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

write(char[] cbuf, int off, int len)

Este método escreve uma parte de um array de caracteres especificada por char[] cbuf do int off até o int len.

  • cbuf: Um array de caracteres
  • off: Deslocamento a partir do qual começar a ler caracteres
  • len: Número de caracteres a serem escritos
package com.journaldev.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file using FileWriter write(char[] cbuf,  int  off,  int  len) method
 * 
 * @author pankaj
 *
 */
public class FileWriterWriteCharArray {

	public static void main(String[] args) {
		char[] data = "This is FileWriter Example.".toCharArray();
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			// método herdado de java.io.OutputStreamWriter 
			fileWriter.write(data, 8, 10);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

write(char[] cbuf)

Este método escreve o array de caracteres especificado por cbuf.

package com.journaldev.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file using FileWriter write(char[] cbuf) method
 * 
 * @author pankaj
 *
 */
public class FileWriterWriteCharArrayExample {

	public static void main(String[] args) {
		char[] data = "This is FileWriter Example.".toCharArray();
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			// método herdado de java.io.Writer 
			fileWriter.write(data);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

write(String str)

Este método escreve um valor de string no arquivo especificado por str.

package com.journaldev.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file using FileWriter write(String  str) method
 * 
 * @author pankaj
 *
 */
public class FileWriterWriteString {

	public static void main(String[] args) {
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			// método herdado de java.io.Writer 
			fileWriter.write("JournalDev");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

append(char c)

Este método acrescenta o caractere especificado a este escritor onde c é o caractere de 16 bits a ser acrescentado.

package com.journaldev.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file using FileWriter append(char c) method
 * 
 * @author pankaj
 *
 */
public class FileWriterAppendCharacter {

	public static void main(String[] args) {
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			//método herdado de java.io.Writer 
			fileWriter.write("JournalDev");
			fileWriter.append('C');
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

flush()

Este método limpa o fluxo. Quando o método flush() é chamado, ele escreve imediatamente os dados no arquivo de saída.

package com.journaldev.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file with FileWriter flush() method
 * 
 * @author pankaj
 *
 */
public class FileWriterFlushExample {

	public static void main(String[] args) {
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			//método herdado de java.io.Writer 
			fileWriter.write("JournalDev");
			//método herdado de java.io.OutputStreamWriter
			fileWriter.flush();
			
			fileWriter.write(" Tutorials");
			fileWriter.flush();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

close()

Este método limpa o fluxo antes de fechá-lo. Uma vez que o fluxo tenha sido fechado, a invocação do método write() ou flush() causará uma exceção IOException a ser lançada. Fechar um fluxo previamente fechado não tem efeito.

package com.journaldev.io.filewriter;

import java.io.FileWriter;

/**
 * Java write file with FileWriter close() method
 * 
 * @author pankaj
 *
 */
public class FileWriterCloseExample {

	public static void main(String[] args) {
		try(FileWriter fileWriter = new FileWriter("D:/data/file.txt")) {
			//método herdado de java.io.Writer 
			fileWriter.write("JournalDev");
			//método herdado de java.io.OutputStreamWriter
			fileWriter.close();;
			
			fileWriter.write(" Tutorials");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

Saída:

java.io.IOException: Stream closed
	at sun.nio.cs.StreamEncoder.ensureOpen(Unknown Source)
	at sun.nio.cs.StreamEncoder.write(Unknown Source)
	at sun.nio.cs.StreamEncoder.write(Unknown Source)
	at java.io.OutputStreamWriter.write(Unknown Source)
	at java.io.Writer.write(Unknown Source)
	at com.journaldev.examples.FileWriterCloseExample.main(FileWriterCloseExample.java:20)

FileWriter vs FileOutputStream

  • FileWriter é destinado a escrever fluxos de caracteres, enquanto FileOutputStream é usado para escrever fluxos de bytes brutos.
  • FileWriter lida com caracteres de 16 bits, enquanto FileOutputStream lida com bytes de 8 bits.
  • FileWriter pode lidar com strings Unicode, enquanto FileOutputStream escreve bytes em um arquivo e não aceita caracteres ou strings, sendo necessário envolvê-lo com OutputStreamWriter para aceitar strings.

Também confira java write file para obter mais informações sobre como escrever arquivos em Java. Isso é tudo para o Java FileWriter, espero que nada importante tenha sido deixado de fora.

Você pode baixar todo o código de exemplos do nosso Repositório no GitHub.

Referência: Documentação da API

Source:
https://www.digitalocean.com/community/tutorials/java-filewriter-example