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:
privatevoidsalvaArquivo(Stringt){Stringcaminho=escolhedor.getSelectedFile().getAbsolutePath();if(!caminho.endsWith(".txt"))caminho=caminho+".txt";try{FileWriterfw=newFileWriter(newFile(caminho));BufferedWriterbw=newBufferedWriter(fw);bw.write(t);bw.close();}catch(IOExceptione){//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).
[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
JME
Caso as palavras tenham algum separador você pode tentar fazer um split e ir quebrando antes,já tentou dessa forma?
V
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.
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
tomorrowdoesntmakese
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:
privatevoidsalvaArquivo(Stringt){Stringcaminho=escolhedor.getSelectedFile().getAbsolutePath();if(!caminho.endsWith(".txt"))caminho=caminho+".txt";Stringlinhas[]=t.split("\n");try{FileWriterfw=newFileWriter(newFile(caminho));PrintWriterpw=newPrintWriter(fw);for(inti=0;i<linhas.length;i++)pw.println(linhas[i]);pw.close();}catch(IOExceptione){//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)