Leitura e escrita de um arquivo .txt (Stream)

6 respostas
bsl.lacerda

Boa tarde a todos!

Estou tentando resolver um exercício onde eu preciso fazer a leitura do conteúdo de um arquivo texto e ao invés de imprimir o conteúdo do arquivo no console eu preciso gravá-lo em um novo arquivo. A classe está sem erros de sintaxe mas na hora de executar eu recebu uma excessão (NullPointerException). Alguém pode me ajudar? Abaixo segue a definiçãoda classe.
package br.com.java.io.stream.exercicios;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;

public class FazLeituraEGravaEmUmNovoArquivo {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		InputStream arquivo = new FileInputStream("seralido.txt");
		try {
			InputStreamReader scan = new InputStreamReader(arquivo);
			BufferedReader br = new BufferedReader(scan);
			String s = br.readLine();

			while (s != null) {
				s = br.readLine();
			}

			OutputStream os = new FileOutputStream("leituraesaida.txt");
			OutputStreamWriter osw = new OutputStreamWriter(os);
			BufferedWriter bw = new BufferedWriter(osw);

			bw.write(s);

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}

}
Obrigado.

6 Respostas

davidbuzatto

Quando o while é iterado pela última vez, s recebe null. Lá no final, na hora q vc tenta escrever no BufferedWriter (bw.write(s)) vc ta passando null (pq s está null).

Isso

String s = br.readLine();
 
while (s != null) {
    s = br.readLine();
}
 
OutputStream os = new FileOutputStream("leituraesaida.txt");
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
 
bw.write(s);
Se transforma nisso:
String s = br.readLine();
OutputStream os = new FileOutputStream("leituraesaida.txt");
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
 
while (s != null) {
    s = br.readLine();
    bw.write(s);
}

bw.close();

Até mais!

davidbuzatto

Mais uma coisa, para ler arquivos de texto, use um FileReader ou qualquer outro Reader.

As classes do pacote java.io que tem nome Reader são dedicadas a leitura de streams que contém texto. Já as com nome Writer são dedicadas a escrita de streams que contém texto.

Até mais!

bsl.lacerda

Olá David!
Agora rodou, mas o conteúdo do arquivo lido (seralido.txt) não foi gravado no arquivo destino (leituraesaida.txt). :frowning:

davidbuzatto

Escrevi um exemplo completo. Dá uma olhada.

public static void main( String[] args ) {
	
	try {
		
		BufferedReader br = new BufferedReader( new FileReader( "origem.txt" ) );
		BufferedWriter bw = new BufferedWriter( new FileWriter( "destino.txt" ) );
		
		String linha = null;
		
		while ( ( linha = br.readLine() ) != null ) {
			
			bw.write( linha, 0, linha.length() );
			bw.newLine();
			
		}
		
		br.close();
		bw.close();
		
	} catch ( IOException exc ) {
		
		exc.printStackTrace();
		
	}
	
}

Até mais!

bsl.lacerda

Valeu pela força.

davidbuzatto

Disponha :slight_smile:

Criado 1 de agosto de 2007
Ultima resposta 2 de ago. de 2007
Respostas 6
Participantes 2