Descompactando varios arquivos de um zip

6 respostas
carioca

To tentando descompactar varios arquivos de um zip, mas quando ele os grava todos ven com size == 0, a estrutura de arvore está correta.

try {
			
			ZipFile zf = new ZipFile("C:\Documents and Settings\Usuário\Desktop\testando.zip");
			ZipInputStream in = new ZipInputStream( new FileInputStream( zf.getName() ) );
		    
			for (Enumeration entries = zf.entries(); entries.hasMoreElements();) {

				ZipEntry entry = (ZipEntry) entries.nextElement();
				System.out.println( entry.getName() );
				
				if( entry.isDirectory() ){
					
					boolean ok = ( new File( "C:\Documents and Settings\Usuário\Desktop\Carioca\" + entry.getName() ) ).mkdirs();
					
				}
				else{
				
					OutputStream out = new FileOutputStream( "C:\Documents and Settings\Usuário\Desktop\Carioca\" + entry.getName() );
					
					byte[] buf = new byte[1024];
					int len;
					while ((len = in.read(buf)) > 0) {
						out.write(buf, 0, len);
					}
					
					out.close();
				}					
				
			}
			
			in.close();

		}catch( IOException ioex){
			
			ioex.printStackTrace();
		}

6 Respostas

T

Dei uma mexida no seu programa, veja se agora funciona.

Ele tem um “pequeno problema”:
Uma coisa que você supõe é que antes de cada arquivo com diretório, vem a especificação do diretório vazio para ser criado. Mas nem sempre um arquivo zip tem essas especificações de diretórios vazios. Se você quiser realmente fazer o seu próprio “Unzip + Java”, você deve criar o diretório de qualquer maneira, mesmo que o arquivo .zip não tenha especificações de diretórios.

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

class TestZip {
    public static void main(String[] args) {
        try {
            ZipFile zf = new ZipFile(C:\\Documents and Settings\\Usuário\\Desktop\\testando.zip);

            for (Enumeration entries = zf.entries(); entries.hasMoreElements();) {
                ZipEntry entry = (ZipEntry) entries.nextElement();
                System.out.println( entry.getName() );

                if( entry.isDirectory() ){
                    boolean ok = ( new File( "C:\\Documents and Settings\\Usuário\\Desktop\\Carioca", entry.getName() ) ).mkdirs();
                } else {
                    InputStream in = zf.getInputStream(entry);

                    OutputStream out = new FileOutputStream( new File ("C:\\Documents and Settings\\Usuário\\Desktop\\Carioca", entry.getName()) );

                    byte[] buf = new byte[1024];
                    int len;
                    while ((len = in.read(buf)) > 0) {
                        out.write(buf, 0, len);
                    }
                    in.close();
                    out.close();
                }
            }
        } catch(IOException ioex) {
            ioex.printStackTrace();
        }
    }
}
carioca

Show de bola mano, valeu mesmo.

Mas eu não to conseguindo usa-lo, da erro em tempo de execução.
To tentando sanar o problemas mas não obtive exito ainda.
Sabe o que seria??

carioca
Valeu ai, ja arrumei.
try { 
            
            ZipFile zf = new ZipFile( "C:Documents and SettingsUsuárioDesktopCarioca	estando.jar" ); 

            for (Enumeration entries = zf.entries(); entries.hasMoreElements();) { 
                
                ZipEntry entry = (ZipEntry) entries.nextElement(); 
                
                StringTokenizer str = new StringTokenizer( entry.getName(), "/", false ); 
                
                int cont = str.countTokens();
                String aux = "";
                
                for( int i = 0; i < cont - 1; i++ ){
                	
                   	aux += str.nextToken() + "";
                }
                	
                boolean ok = ( new File( "$PATH($P(absoluteInstallLocation))", aux ) ).mkdirs();
            
                InputStream in = zf.getInputStream(entry); 
                File filez = new File ( "$PATH($P(absoluteInstallLocation))", entry.getName());
                   
                
                OutputStream out = new FileOutputStream( filez ); 

                byte[] buf = new byte[1024]; 
                int len; 
                while ((len = in.read(buf)) > 0){ 
                	
                    out.write(buf, 0, len); 
                } 
                in.close(); 
                out.close(); 
            
            }
            
        } catch(IOException ioex) { 
            
            ioex.printStackTrace(); 
        }
C

Tenho uma dúvida. Como posso descompactar arquivos ZIP protegidos por senha ? Fico no aguardo.

Obrigado

T

O java.util.zip não tem suporte para isso, você vai ter de procurar no Google… :wink:

P

[quote=Carlos Alberto Nichele Jr]Tenho uma dúvida. Como posso descompactar arquivos ZIP protegidos por senha ? Fico no aguardo.

Obrigado[/quote

Come stai Carlos ? Beh, ti ho detto come dovevi fare per scompattare gli archivi, però non mi hi detto se te ne sei riuscito. Dimmelo così possa, così avrò anche le tue notizie. A presto. Paula :cry: 8) 8)

Criado 29 de outubro de 2004
Ultima resposta 9 de nov. de 2007
Respostas 6
Participantes 4