Quando vale i ao entrar nesse loop? É zero, ou algum outro valor?
leandrogbraga
Tu matou a pau… por um erro meu ele estava com valor 4.
Ele criou o zip mais ainda está com outro problema a minha lógica… ele não esta adicionando os arquivos do vetor no zip.
Obrigado
E
entanglement
out.putNextEntry(newZipEntry(compac));
Não faça isso - você não está passando absolutamente nenhuma informação sobre os nomes dos arquivos origem, e outras coisas necessárias.
Você usa o método de programação “se compilar, vai funcionar”? Que vergonha.
Pegue esse “new ZipEntry”, jogue em uma variável, sete as propriedades adequadas, senão ele não vai funcionar. Só depois disso é que você dá um “putNextEntry”.
leandrogbraga
Estou tentando entender como funciona… os exemplos que vi com zip eram bem simples e não explicavam muito bem… se eu não meter a mão e ver como funciona não rola, não tenho vergonha de perguntar o que eu não sei. Mais sei agradecer a quem me ajuda. Obrigado e irei usar a sua dica.
E
entanglement
Você me deixou curioso. Enquanto está rodando aqui uma compilação monstruosa em C++ que está me impedindo de usar a máquina para outras coisas, vou tentar fazer um zipador de arquivos, só por curiosidade.
leandrogbraga
:lol: obrigado mais uma vez pela ajuda a este humilde técnico de suporte estudando java.
E
entanglement
Veja como normalmente se faz para criar um .zip.
/** * Teste para zipar um arquivo. * Como rodar este programa: * a) Crie um subdiretório "teste" sob o seu diretório corrente * b) Copie um monte de arquivos .java e outros tipos para esse subdiretório * c) Rode o programa. Deve criar um arquivo "teste.zip" * d) Veja que ele criou um .zip com os arquivos .java apenas, não outros tipos. */packageguj;importjava.io.BufferedInputStream;importjava.io.File;importjava.io.FileFilter;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.util.ArrayList;importjava.util.Collection;importjava.util.List;importjava.util.regex.Pattern;importjava.util.zip.ZipEntry;importjava.util.zip.ZipOutputStream;/** * */publicclassExemploZipador{publicvoidsetOutputFile(FileoutputFile){this.outputFile=outputFile;}publicvoidsetInputFiles(Collection<File>inputFiles){this.inputFiles.clear();this.inputFiles.addAll(inputFiles);}publicList<File>listFiles(booleanrecursive,Filedirectory,Patternpattern){List<File>files=newArrayList<File>();listFiles(recursive,files,directory,pattern);returnfiles;}publicvoidzip(List<Exception>exceptions){ZipOutputStreamzos=null;try{zos=newZipOutputStream(newFileOutputStream(outputFile));byte[]buffer=newbyte[10240];for(Filef:inputFiles){StringentryName=f.getPath();ZipEntryze=newZipEntry(entryName);ze.setMethod(ZipEntry.DEFLATED);ze.setTime(f.lastModified());zos.putNextEntry(ze);BufferedInputStreambis=null;try{bis=newBufferedInputStream(newFileInputStream(f));System.out.printf("Compresssing file %s...%n",entryName);for(intnBytes=bis.read(buffer);nBytes>0;nBytes=bis.read(buffer)){zos.write(buffer,0,nBytes);}}catch(IOExceptionex2){exceptions.add(ex2);}finally{if(bis!=null){try{bis.close();}catch(IOExceptionex){}}zos.closeEntry();System.out.printf("File %s - Compressed = %,d, Original = %,d bytes%n",entryName,ze.getCompressedSize(),ze.getSize());}}}catch(IOExceptionex){exceptions.add(ex);}finally{try{if(zos!=null)zos.close();}catch(IOExceptionex){}}}privatevoidlistFiles(booleanrecursive,List<File>files,Filedirectory,finalPatternpattern){File[]fileList=directory.listFiles(newFileFilter(){@Overridepublicbooleanaccept(Filepathname){returnpathname.isDirectory()||pattern.matcher(pathname.getName()).matches();}});for(Filefile:fileList){if(file.isDirectory()&&recursive){listFiles(recursive,files,file,pattern);}else{files.add(file);}}}/** * @param args */publicstaticvoidmain(String[]args)throwsException{ExemploZipadorez=newExemploZipador();ez.setOutputFile(newFile("teste.zip"));ez.setInputFiles(ez.listFiles(true,newFile("teste"),Pattern.compile(".*\.java",Pattern.CASE_INSENSITIVE)));List<Exception>exceptions=newArrayList<Exception>();ez.zip(exceptions);if(exceptions.isEmpty()){System.out.println("File was successfully created");}else{System.err.println(String.format("%d errors found while compressing files in directory %s",exceptions.size(),"teste"));}}privateFileoutputFile;privateList<File>inputFiles=newArrayList<File>();}
leandrogbraga
Muito Obrigado!!!
Amanhã eu estudarei linha a linha; hoje estou voando para a faculdade.
Obrigado
leandrogbraga
Consegui fazer funcionar... Vou postar o código para ajudar a quem possa vir a ter a mesma dificuldade que a minha.
Obrigado ao entanglement pelos posts.
obs: Não sou profissional, apenas um estudante, criticas são sempre bem vindas.
packagezipnew;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.util.Calendar;importjava.util.Date;importjava.util.zip.ZipEntry;importjava.util.zip.ZipOutputStream;importjavax.swing.JOptionPane;publicclassZipar{publicstaticvoidzipa(Dated)throwsIOException{Stringdir=("d:\Cam");Filefile;Filearquivos[];file=newFile(dir);Fileafile[]=file.listFiles();arquivos=newFile[afile.length];//Data do SistemaCalendarcal=Calendar.getInstance();cal.set(Calendar.HOUR,0);cal.set(Calendar.MINUTE,0);cal.set(Calendar.SECOND,0);cal.set(Calendar.MILLISECOND,0);DatesysDate=cal.getTime();sysDate.setHours(0);//Data do arquivointi=0;DatefileDate=null;fileDate=newDate(afile[i].lastModified());CalendarcalFile=Calendar.getInstance();calFile.setTime(fileDate);calFile.set(Calendar.HOUR,0);calFile.set(Calendar.MINUTE,0);calFile.set(Calendar.SECOND,0);calFile.set(Calendar.MILLISECOND,0);fileDate=calFile.getTime();fileDate.setHours(0);//verifica se a data escolhida e a data correnteif(d.compareTo(sysDate)==0){JOptionPane.showMessageDialog(null,"Não é possivel zipar arquivos do dia corrente!!!");return;}else{//verifica se a data escolhida e um dia futuroif(d.after(sysDate)){JOptionPane.showMessageDialog(null,"Escolha uma data valida!!!");return;}else{for(intj=afile.length;i<j;i++){//verifica se existem arquivos na data escolhida e carrega o vetorif(d.compareTo(fileDate)==0){arquivos[i]=afile[i];}}//verifica se o vetor esta vazioif(arquivos==null){JOptionPane.showMessageDialog(null,"Não existe arquivo nesta data para compactar!!!");return;}else{byte[]buf=newbyte[1024];try{StringoutFilename="d:\Backup\Backup.zip";ZipOutputStreamout=newZipOutputStream(newFileOutputStream(outFilename));i=0;for(intj=arquivos.length;i<j;i++){FileInputStreamin=newFileInputStream(arquivos[i]);out.putNextEntry(newZipEntry(arquivos[i].getName()));intlen;while((len=in.read(buf))>0){out.write(buf,0,len);}out.closeEntry();in.close();}out.close();}catch(IOExceptione){}}}}}}