Exemplo de Java FileWriter

Java FileWriter

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

Construtores do FileWriter

  1. FileWriter(File file): Cria um objeto FileWriter usando o objeto File especificado. Gera uma IOException se o arquivo existir, mas for um diretório em vez de um arquivo regular, ou se não existir, 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 nome do arquivo especificado. Ele lança um IOException se o arquivo com o nome fornecido 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 nome do arquivo 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 fornecido 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 FileWriter Java

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) irá 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 off a 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, 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 uma matriz de caracteres especificada por char[] cbuf a partir do inteiro off até o inteiro len.

  • cbuf: Uma matriz 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 a matriz de caracteres especificada 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 anexa o caractere especificado a este escritor, onde c é o caractere de 16 bits a ser anexado.

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 esvazia 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 esvazia 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 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

  • O FileWriter é destinado a escrever fluxos de caracteres enquanto o FileOutputStream é usado para escrever fluxos de bytes brutos.
  • O FileWriter lida com caracteres de 16 bits enquanto o FileOutputStream lida com bytes de 8 bits.
  • O FileWriter pode lidar com strings Unicode enquanto o FileOutputStream escreve bytes em um arquivo e não aceita caracteres ou strings, portanto, precisa ser envolvido por 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 FileWriter do Java, espero que nada importante tenha sido perdido aqui.

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

Referência: Documentação da API

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