Quebra de linha ao gravar um arquivo de texto

5 respostas
T

Olá, pessoal.

Eu tenho um JTextArea que recebe em texto qualquer do usuário, e um método que recebe a String do JTextArea e salva um arquivo de texto.
O problema é que o Windows ignora a quebra de linha (no Linux funciona direito).
Sei que o problema é que os dois sistemas usam códigos diferentes pra representar a quebra de linha, mas não sei como resolver a questão.
Vejam o método que escreve a String em um txt:

private void salvaArquivo(String t) {
		String caminho = escolhedor.getSelectedFile().getAbsolutePath();
		if(!caminho.endsWith(".txt"))
			caminho = caminho+".txt";		
		
		try {
			FileWriter fw = new FileWriter(new File(caminho));
			BufferedWriter bw = new BufferedWriter(fw);
			bw.write(t);
			bw.close();
		} catch (IOException e) {
			//Uma janela de erro deveras informativa...
			JOptionPane.showMessageDialog(null, "Falha interna");
		}
	}

Acho que não tenho como usar o bw.newLine(); neste caso. Não tenho como mandar o newLine no meio do write(t).

Alguém tem a solução?

5 Respostas

J

Tenta fazer dessa forma no seu método writter:

bw.write(t+"\r\n");
T

[quote=JME]Tenta fazer dessa forma no seu método writter:

bw.write(t+"\r\n");

Já tentei. Ele escreve o texto todo e coloca a quebra de linha no final.

J

Caso as palavras tenham algum separador você pode tentar fazer um split e ir quebrando antes,já tentou dessa forma?

V

Essa classe de Writer (e logo abaixo, Stream) devem te ajudar. Ela permite escrever num JTextArea com um PrintWriter, tal como você faz para escrever um arquivo. Assim ela também trata questões de multi-plataforma.

Ela também cuida de detalhes como fazer o scroll do JTextArea se mexer.

Para escrever num arquivo, prefira a classe PrintWriter. Normalmente é necessário escrever linha-a-linha do JTextArea. No caso, eu usava um Writer que disparava ao mesmo tempo para o arquivo de textos e para o JTextArea.

T

Pessoal,

Eu já tinha pensado em fazer a solução indicada por vocês, que é repartir a String e escrever linha a linha, mas imaginei que houvesse uma forma mais simples de se fazer isso… Pelo visto, não há.

Alterei o método desta forma -e seguindo a orientação de usar o PrintWriter:

private void salvaArquivo(String t) {
		String caminho = escolhedor.getSelectedFile().getAbsolutePath();
		if(!caminho.endsWith(".txt"))
			caminho = caminho+".txt";
		
		String linhas[] = t.split("\n");
		
		try {
			FileWriter fw = new FileWriter(new File(caminho));
			PrintWriter pw = new PrintWriter(fw);
			
			for(int i=0; i<linhas.length; i++) 
				pw.println(linhas[i]);
			
			pw.close();
		} catch (IOException e) {
			//Uma janela de erro deveras informativa...
			JOptionPane.showMessageDialog(null, "Falha interna");
		}
	}

Funcionou perfeitamente no Linux e no Windows.

Agora, um porém…

ViniGodoy:
Essa classe de Writer (e logo abaixo, Stream) devem te ajudar. Ela permite escrever num JTextArea com um PrintWriter, tal como você faz para escrever um arquivo. Assim ela também trata questões de multi-plataforma.

Ela também cuida de detalhes como fazer o scroll do JTextArea se mexer.

Eu pesquisei a respeito, mas não descobri como fazer isso.
Meu JTextArea está num JScrollPane, e este último está num JFrame.
(o software que faço é um notepad dos mais simples)

Enfim, deu certo. Obrigado aos dois.

Criado 26 de maio de 2014
Ultima resposta 28 de mai. de 2014
Respostas 5
Participantes 3