Eu gostaria de saber como ler um arquivo byte a byte, e escrevê-lo novamente no disco.
Eu estava tentando com o FileInputStream, entretanto não estou conseguindo trabalhar com ele.
So pra esclarecer, não quero ler caracteres, nem salvar um arquivo de texto, quero poder ler qualquer fluxo de dados e salva-lo novamente no disco.
Acho que fiz isso quando fiz o FJ-11 da Caelum. Dê uma olhadinha no e-book que é free disponibilizado no site.
ganondorfan
Não consigo baixar o PDF, sera que é só comigo isso?
ganondorfan
Bom a respeito da apostila da Caelum , realmente muito formulada, embora meu problema não seja abordado diretamente lá.
O meu codigo segue abaixo:
publicclassleitora{/** * @param args */publicstaticvoidmain(String[]args){// TODO Auto-generated method stubStringcaminho="c:/";Filearquivo=newFile(caminho);if(arquivo.isDirectory()){String[]lista=arquivo.list();intcont=0;for(Stringa:lista){System.out.println(a+" "+cont);cont++;}caminho+=lista[4];System.out.print(caminho);try{FileInputStreamfluxo=newFileInputStream(caminho);byte[]bytes=newbyte[1024];try{fluxo.read(bytes);Filenovo=newFile("C:/novo.jpg");FileOutputStreamescritor=newFileOutputStream(novo);escritor.write(bytes);}catch(IOExceptione){// TODO Auto-generated catch blocke.printStackTrace();}}catch(FileNotFoundExceptione){// TODO Auto-generated catch blocke.printStackTrace();}}}
Ele quase funciona, no caso do teste o arquivo é uma imagem, porem a imagem é salva pela metade.
Será que o problema é o tamanho do meu vetor de bytes?
Como descobrir o tamanho em bytes antes de salvar?
A
arthurmenezes
try{DataInputStreamin=newDataInputStream(newBufferedInputStream(newFileInputStream("conteudo.txt")));while(in.available()!=0)System.out.print((char)in.readByte());}catch(IOExceptione){// possiveis erros são tratatos aqui}
tenta isso ai cara... DataInputStream pra leitura DataOutPutStream pra escrita.. se não me engano é essa parte da I/O que trabalha com byte
espero ter ajudado
Djonatah
eu vejo dois problemas no exemplo que vc passou:
o arquivo de escrita não foi fechado
o arquivo de imagem (que está sendo lido) tem mais de 1024 bytes.
Geralmente a leitura de uma stream é realizado dentro de um laço de repetição. Baseado no retorno do método read() (que retorna a qtde de bytes lidos ou -1 quando o fim do arquivo foi encontrado) é que se sabe quando se chega ao fim do arquivo. Então eu faria algo como:
intbytesLidos=0byte[]bytes=newbyte[1024]; while(bytesLidos>-1){
bytesLidos=fluxo.read(bytes); escritor.write(bytes,0,bytesLidos); // nem sempre todo o conteúdo do array deve ser salvo
}
...
escritor.close();