No cídigo abaixo como faço para mudar de linha usando o metodo writeByte
public class TrataBinario {
publicstaticvoidmain(String[]args)throwsIOException{FileInputStreamfis=newFileInputStream("c:\badfiles\ACF729003697215012004181500.TXT");DataInputStreamdis=newDataInputStream(fis);Stringlinha=null;System.out.println("recuperou o valor para string:"+linha);FileOutputStreamfos=newFileOutputStream("c:\badfiles\novoacf.txt");DataOutputStreamdos=newDataOutputStream(fos);//dos.writeChars(i);linha=dis.readLine();while(linha!=null&&linha!="32"){dos.writeBytes(linha);[b]dos.writeBytes("10");dos.writeBytes("13");[/b]linha=dis.readLine();}dos.writeBytes("32");dis.close();dos.close();}}
já porem quando tento abrir o arquivo no notepad ele fica meio bagunçado mais no textedit ele abre corretamente. eu precisava de uma solução que abrisse legal com qualquer editor de testo.
OBS:No local daquela strings que digitei tem uma barra antes, mais não apareceu…(/32 /13 /10)
louds
writeBytes converte sua String em um array de bytes e escreve estes bytes.
use
write(10);write(13);
Uma dica, não use Streams para manipular arquivos de texto, eles servem somente para conteudo binario. Use Reader/Writer que te evitam todos esses problemas.
A
alpacheco
Infelizmente não está dando certo. Utilizando o reader conforme abaixo ele copia certo, porem o servidor não aceita. Da a mensagem que não é um arquivo binario, só dá certo quando utilizo o writeBytes (porem dá problema na quebra de linha. Vc´s tem alguma sugestão, por exemplo como tranformar esse arquivo copiado para binário.
classTest{staticpublicvoidmain(String[]args){char[]buffer=newchar[1024];intlen;try{FileReaderr=newFileReader("ola.txt");FileWriterw=newFileWriter("ole.txt");while((len=r.read(buffer))!=-1)w.write(buffer,0,len);r.close();w.close();}catch(IOExceptione){// Tratar a excepção.}}}
dukejeffrie
Retirado do Javadoc da classe java.io.FileWriter:
Convenience class for writing character files. The constructors of this class assume that the default character encoding and the default byte-buffer size are acceptable. To specify these values yourself, construct an OutputStreamWriter on a FileOutputStream.
(…)
FileWriter is meant for writing streams of characters. For writing streams of raw bytes, consider using a FileOutputStream.
Com FileWriter vc só escreve arquivos “texto”. Isso vem da merda da libc fazer diferença entre arquivos texto e arquivos binários.
Vc pode escrever direto no FileOutputStream, só que vc tem que tratar os caracteres especiais. Mas isso aqui funciona:
byteb='\n';
ou seja, lembre de escrever o barra-r e barra-n em bytes. A merda é ter que prestar atenção se vc tá no Windows ou no Linux, essas coisas.