Olá
Essas classes pertencentes ao pacote java.oi que possuem “Reader” ou “Writer” no seu nome da classe, como em FileWriter ou FileReader, servem para trabalhar com arquivos do tipo texto.
Outra: a arquitetura I/O, em Java, foi estruturada para trabalhar em “encadeamento”. Vc sabe que arquivos trabalham com fluxos de bytes - streams.
Portanto, é necessário que os dados contidos nesses arquivos do tipo texto sejam convertidos em fluxos de bytes. Além disso, é de sua vontade que esses fluxos de bytes sejam transferidos para algum lugar, como um arquivo, por exemplo. Portanto, temos o seguinte encadeamento:
Texto >>> Bytes >>> Arquivo
Vamos para a segunda parte desse encadeamento
Bytes >>> Arquivo, que pode ser representado por:
FileInputStream finputStream = new FileInputStream(new File(“C:\arquivo.txt”));
Observe que o construtor recebe uma instancia da classe File, que nada mais faz do que representar um caminho no disco. Esse objeto seria o responsável por transferir o fluxo de bytes para o arquivo.
Vamos, agora, analisar a primeira parte:
Texto >>> Bytes, que pode ser representado por:
InputStreamReader inputStreamReader = new InputStreamReader(finputStream);
Observe que essa segunda parte recebe um InputStream - FileInputStream é um InputStream. Esse objeto seria o responsável por converter texto em fluxo de bytes.
Ao final, teremos o seguinte:
FileInputStream finputStream = new FileInputStream(new File(“C:\arquivo.txt”)); // Responsável por transferir os bytes para uma saída - nesse caso, um arquivo
InputStreamReader inputStreamReader = new InputStreamReader(finputStream); // Responsável por converter texto em bytes
Agora, é só acessar inputStreamReader atarvés do método write:
inputStreamReader.write(“Gravando no arquivo!”);
Nos bastidores, inputStreamReader converte essa String em fluxo de bytes, e acessa o método write de finputStream - obtido através do seu construtor -, passando esse fluxo de bytes obtidos a partir da String.
Abraços