[Resolvido] Mudar txt de lugar

5 respostas
J

Boa noite pessoal, eu estou criando uma aplicação onde eu leio um arquivo txt e depois o gravo em outro lugar, mas o problema é que ao grava no local de destino o texto fica com algumas linhas trocadas no final do arquivo eu acredito que o problema esta na conversão do arquivo, segue o código.

FileInputStream arqIn= null;
ByteArrayOutputStream arqOut = null;

try {
     byte[] buffer = new byte[1024];

     File file = new File(caminho);
     arqIn = new FileInputStream(file);
     arqOut  = new ByteArrayOutputStream();

      while (arqIn.read(buffer) != -1) {
           arqOut .write(buffer);
      }
} catch (Exception e) {         
}

Se alguem poder dar uma luz fico grato.

5 Respostas

rock-skull

Primeiro, você não disse que ia ler de um lugar e escrever em outro? Você está lendo e escrevendo o mesmo arquivo.

Segundo, feche seus streams quando não for mais usá-los. (arqIn.close() e arqOut.close())

Bom, eu sei que é só um exemplo, mas capture as Exception específicas (IOEXcpetion nesse caso).

Começa por aí. Depois, dê uma pesquisada sobre Leitura e escrita de arquivos. Existem métodos melhores para se fazer isso. Pode começar lendo isso: http://download.oracle.com/javase/tutorial/essential/io/streams.html

F

Uma pergunta: você quer poder editar esse texto antes de gravar em outro local?
Outra pergunta: o local a ser salvo será escolhido pelo usuário ou terá um caminho fixo?

J

Rock-skull obrigado pela ajuda mas ainda não funcionou,

fcordeiro quanto as suas perguntas

1)Eu não quero editar o texto.
2)Sim o local vai ser escolhido pelo usuário, pois eu o crio no servidor e depois o cliente faz o download do mesmo através do componente para download o primefaces.
Será que problema é com o prime ?

E
while (arqIn.read(buffer) != -1) {
           arqOut .write(buffer);
      }

Digamos que o comprimento do seu arquivo original não seja múltiplo de 1024. O que vai ocorrer ? Provavelmente arqOut vai ficar com sujeira.

O correto é você ter algo como:

int nBytesLidos;
     while (true) {
         nBytesLidos = arqIn.read(buffer);
         if (nBytesLidos < 0) 
             break;
         arqOut.write (buffer, 0, nBytesLidos);
     }
J

Entanglement obrigado pela ajuda modifiquei o código segundo sua sugestão e agora o arquivo não está mais trocando as linhas.

Criado 6 de setembro de 2011
Ultima resposta 8 de set. de 2011
Respostas 5
Participantes 4