Unzip

9 respostas
snowblacksoul

Olá pessoal blz!!

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!!

fico no aguardo da ajuda de vc´s

valeu galera

9 Respostas

snowblacksoul

Puxa vida 12 visitas e ninguém pode me ajudar!!!

orlandocn
eu utilizo o codigo abaixo:
public static void unzip(String nomeArquivo, String diretorioSaida) {
        unzip(nomeArquivo, diretorioSaida,null);
    }
    public static void unzip(String nomeArquivo, String diretorioSaida, Progress campoLog) {
        Enumeration entries;
        ZipFile zipFile;
        try {
            zipFile = new ZipFile(nomeArquivo);

            entries = zipFile.entries();

            while (entries.hasMoreElements()) {
                ZipEntry entry = (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.
                    (new File(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),
                               new BufferedOutputStream(new FileOutputStream(diretorioSaida +"/"+ entry.getName())));
            }

            zipFile.close();
        } catch (IOException ioe) {
            System.err.println("Unhandled exception:");
            ioe.printStackTrace();
            return;
        }
    }

     private static final void copyInputStream(InputStream in, OutputStream out) throws
          IOException {
          byte[] buffer = new byte[1024];
          int len;

          while ((len = in.read(buffer)) >= 0)
              out.write(buffer, 0, len);
 
          in.close();
          out.close();
     }

faca as adaptacoes que julgar necessario.

boa sorte

otaviojava

Dá uma olhada nisso:
http://java.sun.com/developer/technicalArticles/Programming/compression/

otaviojava
import java.io.*;
import java.util.zip.*;

public class UnZip {
   final int BUFFER = 2048;
   public static void main (String argv[]) {
      try {
         BufferedOutputStream dest = null;
         FileInputStream fis = new 
	   FileInputStream(argv[0]);
         ZipInputStream zis = new 
	   ZipInputStream(new BufferedInputStream(fis));
         ZipEntry entry;
         while((entry = zis.getNextEntry()) != null) {
            System.out.println("Extracting: " +entry);
            int count;
            byte data[] = new byte[BUFFER];
            // write the files to the disk
            FileOutputStream fos = new 
	      FileOutputStream(entry.getName());
            dest = new 
              BufferedOutputStream(fos, BUFFER);
            while ((count = zis.read(data, 0, BUFFER)) 
              != -1) {
               dest.write(data, 0, count);
            }
            dest.flush();
            dest.close();
         }
         zis.close();
      } catch(Exception e) {
         e.printStackTrace();
      }
   }
}
Priuli

Cara eu só descompactei arquivos zips até o momento outros formatos eu ainda não precisei.
Ei tenho um projeto free, e lá tem o codigo de como compactar e descompactar arquivos no formato zip e outras coisas caso interesse:
O projeto chama-se: OpenSutils-Br4J
Sobre zip:
http://code.google.com/p/opensutils-br4j/wiki/ZipUtils
Download:
http://code.google.com/p/opensutils-br4j/downloads/list
Codigo svn:
svn checkout https://opensutils-br4j.googlecode.com/svn/trunk/
Acessar codigo pelo Browser:
http://opensutils-br4j.googlecode.com/svn/OpenSutils-Br4J/src/org/opensutils/io/

A

Tem também a API da Apache Commons Compress…

snowblacksoul

Fala pessoal, blz pelas rsspostas muito obrigado!

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

Você irá descompactar pasta (diretório) e/ou arquivo ou apenas arquivo ou apenas pasta?

A

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" })
	public static void extraiZip(File origem, File destino) throws ZipException, IOException {  
		ZipFile zip = null;  
	    File arquivo = null;  
	    InputStream is = null;  
	    OutputStream os = null;  
	   
	    byte[] buffer = new byte[1024];  
	    
	    try {  
	      if(!destino.exists()) {  
	        destino.mkdirs();  
	      }  
	      if(!destino.exists() || !destino.isDirectory()) {  
	        throw new IOException("Informe um diretório válido");  
	      }  
	      
	      zip = new ZipFile(origem);  
	      Enumeration e = zip.entries(); 
	      while(e.hasMoreElements()) {  
	        ZipEntry entrada = (ZipEntry) e.nextElement();  
	        arquivo = new File(destino, entrada.getName());  
	        if(entrada.isDirectory() && !arquivo.exists()) {  
	          arquivo.mkdirs();  
	          continue;  
	        }  
	        if(!arquivo.getParentFile().exists()) {  
	          arquivo.getParentFile().mkdirs();  
	        } 
	        
			is = zip.getInputStream(entrada);
			os = new FileOutputStream(arquivo);
			int bytesLidos = 0;
			if (is == null) {
				throw new ZipException("Erro ao ler a entrada do zip: "
						+ entrada.getName());
			}
			
			while ((bytesLidos = is.read(buffer)) > 0) {
				os.write(buffer, 0, bytesLidos);
			}
		}
	      
	    } catch(Exception e){
	    	
	    }finally {  
	    	if (os != null){
	    		os.close();
	    	}
	    	
	    	if (is != null){
	    		is.close();
	    	}
	    	
	    	if (zip != null){
	    		zip.close();
	    	}  
	    }  
	}
Criado 9 de fevereiro de 2011
Ultima resposta 11 de fev. de 2011
Respostas 9
Participantes 5