No cídigo abaixo como faço para mudar de linha usando o metodo writeByte
public class TrataBinario {
public static void main(String[] args)throws IOException{
FileInputStream fis = new FileInputStream("c:\badfiles\ACF729003697215012004181500.TXT");
DataInputStream dis = new DataInputStream(fis);
String linha= null;
System.out.println("recuperou o valor para string:"+linha);
FileOutputStream fos = new FileOutputStream("c:\badfiles\novoacf.txt");
DataOutputStream dos = new DataOutputStream(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)
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.
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.
[quote]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.[/quote]
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:
byte b = '\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.