Leitura e escrita de um arquivo .txt (Stream)

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.

[code]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();
	}
}

}
[/code]
Obrigado.

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

[code]
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);[/code]

Se transforma nisso:

[code]
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();[/code]

Até mais!

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!

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

Escrevi um exemplo completo. Dá uma olhada.

[code]
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();
	
}

}[/code]

Até mais!

Valeu pela força.

Disponha :slight_smile: