Visualizzazione dei risultati da 1 a 8 su 8

Discussione: java zip

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    261

    java zip

    Salve ragazzi dovrei zippare una cartella di documenti in java.
    Fortunatamente ho trovato delle righe di codice gia fatte che però zippano un unico.

    http://www.sastgroup.com/tutorials/z...n-file-in-java

    Quello che noto pero è che cmq devo dare il link di un file ,se do il link di una cartella nn va, non zippa niente ,come posso fare per zippare una cartella intera e quindi più documenti in un unico file zip?

    Saluti

  2. #2
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    Allora.
    Per zippare più file puoi utilizzare la classe File per prelevare la lista dei file della tua cartella, inserire per ogni file uno ZipEntry al tuo archivio ed aggiungere un file.
    Prova a guardare nel forum ( ricerca ) che tempo addietro mi pare di aver già postato qualcosa a riguardo.
    Cmq fai riferimento a ZipEntry ecc... per poter riuscire a fare quello vuoi.
    Nel caso chiedi pure delucidazioni su del codice scritto.
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    261
    Ciao ho modificato il codice telo riporto

    public static void zipFolder(String filename, String[] files) throws IOException
    {
    InputStream in;
    int n;
    int m=0;

    // check
    File zip = new File(filename);

    for (int j=0;j<files.length;j++){
    String[] res = {files[j]};

    ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zip,true));
    byte[] buff = new byte[1024];
    for( int i = 0; i<res.length; ++i) {
    File current = new File(res[i]);
    //if( current.isDirectory())
    // continue;

    out.putNextEntry(new ZipEntry(res[i]));
    in = new FileInputStream(current);

    while((n = in.read(buff, 0, buff.length))!= -1)
    out.write(buff, 0 , n);
    in.close();

    }

    out.close();



    }





    }
    Ho modificato l'ingresso del metoto ,invece di ricevere una stringa riceve un array di stringhe che rappresentano gli indirizzi di ogni file, cosi poi mettendo un ciclo for interno mi modifica ogni volta il RES[i].
    Cmq non funziona faccio qualche errore ,a me pero servirebbe comprimere un intera cartella ,cioè invece di passare un singolo file gli passo la cartella e vorrei quindi che comprimesse la cartella e tutto quello contenuto in essa .......Come posso fare?

    Saluti

  4. #4
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    Originariamente inviato da aspire1982
    Ho modificato l'ingresso del metoto ,invece di ricevere una stringa riceve un array di stringhe che rappresentano gli indirizzi di ogni file, cosi poi mettendo un ciclo for interno mi modifica ogni volta il RES[i].
    Cmq non funziona faccio qualche errore ,a me pero servirebbe comprimere un intera cartella ,cioè invece di passare un singolo file gli passo la cartella e vorrei quindi che comprimesse la cartella e tutto quello contenuto in essa .......Come posso fare?

    Saluti
    Allora, anzichè passargli un vettore di String, passagli la tua cartella, il percorso.
    Infatti con la classe File puoi usare il metodo
    codice:
    File[] new File.listFiles( pathCartella );
    Iteri la lista di File ed aggiungi ogni singolo files alla tua cartella compressa.

    per aggiungere è quasi tutto giusto.
    Devi sì aprire un nuovo ZipEntry ( putNextEntry() ), ma devi anche chiuderlo.
    Infatti dopo in.close(); fai
    out.closeEntry();
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    261
    Ciao @DI3GO@ ho provato ma nn mi funziona , gia se metto solo
    File[] new File.listFiles( pathCartella );
    oppure
    File[] v=new File.listFiles( pathCartella );
    mi dice tipo nn riconosciuto


    inoltre
    out.closeEntry();
    l'ho messo ma cmq mi da errore quando cerco di aprire il file .zip che risulta come se fosse danneggiato,ovviamente inserisco questo metodo mettendo l'array di stringhe visto la lista nn mela fa mettere......Come posso risolvere?

    Saluti

  6. #6
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    Originariamente inviato da @DI3GO@
    codice:
    File[] new File.listFiles( pathCartella );
    Richiedo un linciaggio nei miei confronti!!!

    Allora....
    codice:
    File[] listaFile = newFile( pathCartella ).listFiles();
    Mentre Per il il closeEntry ti deve funzionare:

    codice di esempio
    codice:
    byte[] buffer = new byte[4096];
    FileInputStream iFileStream = null;
    String zipFilename = "prova.zip";
    ZipOutputStream oZipStream = new ZipOutputStream( zipFilename );
    
    for( int i = 0; i < listaFile.length; i++ ){
        oZipStream.putNextEntry( new ZipEntry( listaFile[i].getName() );
    
        iFileStream = new FileInputStream( listaFile[i] );
        
        int read;
        while( ( read = iFileStream.read( buffer ) ) > 0 )
               oZipOutputStream.write( buffer , 0 , read );
       
        oZipOutputStream.closeEntry();
        iFileStream.close();
        iFileStream = null;
    [...]
    Tutto questo blocco va incluso in un try{}catch e gestita correttamente l'eccezione, con la chiusura ( qualora siano nulli ) dei puntatori al file.
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

  7. #7
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    Originariamente inviato da @DI3GO@
    Tutto questo blocco va incluso in un try{}catch e gestita correttamente l'eccezione, con la chiusura ( qualora siano nulli ) dei puntatori al file.
    Qualora non siano nulli....scusate l'errore...
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    261
    Cia Diego ti ringrazio per l'aiuto che mi stai dando funziona la compressione della cartella però nn mi funzione con le sottocartelle,percio ho cercato di modificare un po il codice cosi


    for( int j = 0; j < listaFile[i].getName().length(); j++ ){

    if(listaFile[i].getName().charAt(j)=='.'){
    punto=true;
    j=listaFile[i].getName().length();
    }


    if(punto){
    oZipStream.putNextEntry( new ZipEntry( listaFile[i].getName()) );

    iFileStream = new FileInputStream( listaFile[i] );

    int read;
    while( ( read = iFileStream.read( buffer ) ) > 0 )
    oZipStream.write( buffer , 0 , read );

    oZipStream.closeEntry();
    iFileStream.close();
    }
    else{
    File[] listaFile2 = new File(listaFile[i].getName()).listFiles();

    for (int t=0;t<listaFile2.length;t++){

    oZipStream.putNextEntry( new ZipEntry( listaFile2[t].getName()) );

    iFileStream2 = new FileInputStream( listaFile2[i] );

    int read;
    while( ( read = iFileStream2.read( buffer ) ) > 0 )
    oZipStream.write( buffer , 0 , read );

    oZipStream.closeEntry();
    iFileStream2.close();
    }


    }




    in pratica ho creato una seconda lista nel caso in cui un controllo sulla Stringa del percorso non trovi un " . " ,in questo caso allora creo questa nuova lista ma inizializzata con il path interno della lista precedente

    oZipStream.putNextEntry( new ZipEntry( listaFile2[t].getName()) );


    cosi poi riscrico l'outZip ...pero nn mi funziona cosa sbaglio?

    Saluti

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.