Sei que o tópico ja existe, coloquei novamente, pois não achei nenhum que me ajudasse!
Preciso de uma coisa simples, mas nao sei como fazer.
Vamos lá, o que estou precisando é pegar um arquivo num diretorio que defino qual seja, esse arquivo pode ser, zip, arj,rar ou gz e descompactar numa pasta que defino tbem qual deva ser!!
Por favor pessoal preciso de uma urgencia nisso, pois no local que trabalho eles usam muito foxpro!! é horrivel!!
publicstaticvoidunzip(StringnomeArquivo,StringdiretorioSaida){unzip(nomeArquivo,diretorioSaida,null);}publicstaticvoidunzip(StringnomeArquivo,StringdiretorioSaida,ProgresscampoLog){Enumerationentries;ZipFilezipFile;try{zipFile=newZipFile(nomeArquivo);entries=zipFile.entries();while(entries.hasMoreElements()){ZipEntryentry=(ZipEntry)entries.nextElement();if(entry.isDirectory()){// Assume directories are stored parents first then children.System.err.println("Extracting directory: "+diretorioSaida+"/"+entry.getName());// This is not robust, just for demonstration purposes.(newFile(diretorioSaida+"/"+entry.getName())).mkdir();continue;}if(campoLog!=null){campoLog.alterarHistorico("Descompactando arquivo: "+entry.getName());}else{System.out.println("Extracting file: "+entry.getName());}copyInputStream(zipFile.getInputStream(entry),newBufferedOutputStream(newFileOutputStream(diretorioSaida+"/"+entry.getName())));}zipFile.close();}catch(IOExceptionioe){System.err.println("Unhandled exception:");ioe.printStackTrace();return;}}privatestaticfinalvoidcopyInputStream(InputStreamin,OutputStreamout)throwsIOException{byte[]buffer=newbyte[1024];intlen;while((len=in.read(buffer))>=0)out.write(buffer,0,len);in.close();out.close();}
importjava.io.*;importjava.util.zip.*;publicclassUnZip{finalintBUFFER=2048;publicstaticvoidmain(Stringargv[]){try{BufferedOutputStreamdest=null;FileInputStreamfis=newFileInputStream(argv[0]);ZipInputStreamzis=newZipInputStream(newBufferedInputStream(fis));ZipEntryentry;while((entry=zis.getNextEntry())!=null){System.out.println("Extracting: "+entry);intcount;bytedata[]=newbyte[BUFFER];// write the files to the diskFileOutputStreamfos=newFileOutputStream(entry.getName());dest=newBufferedOutputStream(fos,BUFFER);while((count=zis.read(data,0,BUFFER))!=-1){dest.write(data,0,count);}dest.flush();dest.close();}zis.close();}catch(Exceptione){e.printStackTrace();}}}
Orlando, peguei o codigo, mas nao conseguir rodar, pois precisa da classe principal, como faço!?
e onde coloco o caminho pra pegar o zip e onde coloco o caminho para descompactar, não entendi muito bem o codigo!!
A
andredecotia
Você irá descompactar pasta (diretório) e/ou arquivo ou apenas arquivo ou apenas pasta?
A
andredecotia
Acho que não irá te ajudar complemente mas teste esse código:
Ele descompactar .zip apenas. Está funcionando perfeitinho...
/** * Método que descompacta o .zip. * @throws ZipException * @throws IOException * * */@SuppressWarnings({"unchecked"})publicstaticvoidextraiZip(Fileorigem,Filedestino)throwsZipException,IOException{ZipFilezip=null;Filearquivo=null;InputStreamis=null;OutputStreamos=null;byte[]buffer=newbyte[1024];try{if(!destino.exists()){destino.mkdirs();}if(!destino.exists()||!destino.isDirectory()){thrownewIOException("Informe um diretório válido");}zip=newZipFile(origem);Enumeratione=zip.entries();while(e.hasMoreElements()){ZipEntryentrada=(ZipEntry)e.nextElement();arquivo=newFile(destino,entrada.getName());if(entrada.isDirectory()&&!arquivo.exists()){arquivo.mkdirs();continue;}if(!arquivo.getParentFile().exists()){arquivo.getParentFile().mkdirs();}is=zip.getInputStream(entrada);os=newFileOutputStream(arquivo);intbytesLidos=0;if(is==null){thrownewZipException("Erro ao ler a entrada do zip: "+entrada.getName());}while((bytesLidos=is.read(buffer))>0){os.write(buffer,0,bytesLidos);}}}catch(Exceptione){}finally{if(os!=null){os.close();}if(is!=null){is.close();}if(zip!=null){zip.close();}}}