Visualizzazione dei risultati da 1 a 5 su 5

Discussione: [JAVA] Java e zip

  1. #1

    [JAVA] Java e zip

    Nell'applicazione che sto scrivendo devo interagire con i files compressi... Nel jdk standard che sto usando c'è un package per gestirli, ma non lo fa direttamente; sono riuscito a scrivere il metodo che scompatta una cartella con sottocartelle, ma non riesco a scrivere quello per ricompattarla... quando creo una sottocartella e poi cerco di riempirla, mi tira una fila di eccezioni... sigh! Qualcuno sa come si fa? Grazie mille..

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Qui trovi un po' di informazioni che potrebbero risultarti utili

    http://java.sun.com/developer/techni...g/compression/

    ciao.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    ciao,
    il fatto è che dice tutte cose che sapevo già... lascia al lettore l'implementazione del metodo che comprime cartelle con sottocartelle... nonostante i ripetuti tentativi che ho fatto, ottengo un pezzo di codice che apparentemente funziona, non lancia eccezioni, visita tutto l'albero delle directory interno e teoricamente vi inserisce i rispettivi files, ma aprendo il file.zip così creato ci sono solo i files posti all'esterno delle sottocartelle e un file che ha il nome della prima sottocartella che incontra, in un formato sconosciuto a Windows... il problema è che non crea in modo corretto le cartelle dentro l'archivio zip... (a parte il fatto che sembra che faccia delle operazioni e poi non le fa, che non si capisce il perchè...)
    Ciao e grazie!

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Dal forum della sun

    codice:
    import java.io.*;
    import java.util.*;
    import java.util.zip.*;
     
     
    public class Example {
      public static void main(String[] args) {
        try {
          File dir = new File("c:\\example");
          String dirPath = dir.getAbsolutePath(); 
     
          ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream("c:\\example.zip")));
     
          final int BUFFER = 2048;
          byte data[] = new byte[BUFFER];
     
          BufferedInputStream origin = null;
     
          List files = getFiles(dir);
          for (Iterator iter = files.iterator(); iter.hasNext();) {
            File f = (File) iter.next();
     
            String filePath = f.getAbsolutePath();
            if (filePath.startsWith(dirPath))
              filePath = filePath.substring(dirPath.length()); // create "releative" path
     
            FileInputStream fi = new FileInputStream(f);
     
            origin = new BufferedInputStream(fi, BUFFER);
     
            ZipEntry entry = new ZipEntry(filePath);
            out.putNextEntry(entry);
     
            int count;
            while ((count = origin.read(data, 0, BUFFER)) != -1)
              out.write(data, 0, count);
            origin.close();
          }
     
          out.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
     
      // Get all files in directory and subdirectories
      private static List getFiles(File dir) {
        final List files = new LinkedList();
     
        dir.listFiles(new FileFilter() {
          public boolean accept(File f) {
            if (f.isDirectory())
              return false;
     
            files.add(f);
            return true;
          }
        });
     
        // recurse into subdirectories
        dir.listFiles(new FileFilter() {
          public boolean accept(File f) {
            if (f.isFile())
              return false;
     
            files.addAll(getFiles(f));
            return false;
          }
        });
     
     
        return files;
      }
    }
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    l'ho provato ma l'unica cosa che fa è creare un file "example.zip", ma lo crea vuoto (cioè se ne infischia di quello che c'è nella cartella "example")!!!

    Io ho scritto questi (qualche nome di file o cartella magari è un po' strano, non badateci... son tutte prove!):

    codice:
    import java.io.*;
    import java.lang.*;
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    import java.util.*;
    import java.util.zip.*;
    import javax.swing.tree.*;
    import javax.swing.filechooser.FileSystemView;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.table.*;
    
    public class scompattatore {
    
    private File cartella_lavoro;
    
    scompattatore(){ cartella_lavoro = new File("CARTELLA_LAVORO");
    System.out.println("Creato cartella lavoro");
    }//end costruttore 
    
    
    public void scompatta(File pack)throws ZipException,IOException{
    System.out.println("entrato nel metodo");
    //File pack = JFilechooser.getSelectedFile();
    //controllaestensione(pack, "zip");
    /*se va bene*/
    try {System.out.println("entrato nel try");
    ZipFile zpackage = new ZipFile(pack,ZipFile.OPEN_READ);
    System.out.println("Creato zipfile");
    Enumeration lista = zpackage.entries();
    System.out.println("creata Enumeration");
    for(int i = 0; i < zpackage.size(); i++)
    {ZipEntry entry = (ZipEntry)lista.nextElement();
    System.out.println("il nome della entry e':");
    System.out.println(entry.getName());
    System.out.println(entry.getMethod());
    System.out.println(entry.getExtra());
    System.out.println(entry.getComment());
    System.out.println(entry.getCrc());
    System.out.println(entry.getCompressedSize());
    System.out.println(entry.getSize());
    System.out.println("il separatore e':");
    String separatore = "/";
    System.out.println(separatore);
    StringTokenizer temp = new StringTokenizer( entry.getName(), separatore);
    String path_interno = "";
    int ntoken = temp.countTokens();
    String ultimo = ""; 
    File provv; 
    File ultima_cartella = cartella_lavoro; 
    if ( ntoken > 1 )
    {
    int j;
    
    for ( j = 1; j < ntoken; j++ )
    { ultimo = temp.nextToken();
    if (j == 1){path_interno = ultimo;
    provv = new File(cartella_lavoro,ultimo);
    provv.mkdir();
    System.out.println("Creata dir" + ultimo);
    ultima_cartella = provv;}
    
    else{provv = new File(ultima_cartella, ultimo);
    provv.mkdir();
    System.out.println("Creata dir" + ultimo);
    path_interno = path_interno + "\\" + ultimo;
    ultima_cartella = provv;}
    
    
    }//end for
    
    }// End if
    
    if(entry.isDirectory()){File entry1 = new File(ultima_cartella, entry.getName());
    entry1.mkdir();}
    else{
    InputStream in = zpackage.getInputStream(entry);
    FileOutputStream out = new FileOutputStream(new File(cartella_lavoro,entry.getName()));
    int c;
    while ((c = in.read()) != -1)
    out.write(c);
    
    in.close();
    out.close(); 
    } 
    }//end for
    
    
    }//end try
    catch(Exception e){e.printStackTrace();}
    /*altrimenti messaggio di errore*/
    
    }//end scompatta
    
    public static void main(String[] args) throws IOException {
    scompattatore s = new scompattatore();
    File daScompattare = new File("eser.zip");
    System.out.println("Agganciato file");
    s.scompatta(daScompattare);
    System.out.println("Finito");
    }//end main
    }//end class
    
    import java.io.*;
    import java.util.zip.*;
    
    public class Zip {
    static final int BUFFER = 2048;
    public static void main2 (String cartella, String destinazione) {
    try {
    BufferedInputStream origin = null;
    FileOutputStream dest = new 
    FileOutputStream(destinazione);
    ZipOutputStream out = new ZipOutputStream(new 
    BufferedOutputStream(dest));
    //out.setMethod(ZipOutputStream.DEFLATED);
    byte data[] = new byte[BUFFER];
    // get a list of files from current directory
    File f = new File(cartella);
    String files[] = f.list();
    
    for (int i=0; i System.out.println("Adding: "+files[i]);
    File f1 = new File(cartella + "\\" + files[i]);
    if(!(f1.isDirectory())){
    
    FileInputStream fi = new 
    FileInputStream(cartella + "\\" + files[i]);
    
    origin = new 
    BufferedInputStream(fi, BUFFER);
    ZipEntry entry = new ZipEntry(files[i]);
    out.putNextEntry(entry);
    int count;
    while((count = origin.read(data, 0, 
    BUFFER)) != -1) {
    out.write(data, 0, count);
    }
    origin.close();
    }//end if
    else{
    ZipEntry entry2 = new ZipEntry(files[i]);
    
    entry2.setMethod(0); 
    entry2.setCrc(0); 
    entry2.setCompressedSize(0); 
    entry2.setSize(0); 
    out.setMethod(ZipOutputStream.STORED); 
    out.putNextEntry(entry2);
    
    String c = cartella + "\\" + files[i];
    String d = destinazione;
    main2(c,d);
    }//end else
    }//end for
    out.close();
    } catch(Exception e) {
    e.printStackTrace();
    }
    }//end main2
    
    public static void main(String argv[]){
    main2("CARTELLA_PROVA","c:\\Documents and Settings\\laura\\Desktop\\Laura\\myfigs6.zip");
    }//end main
    }
    La prima classe (scompattatore) funziona perfettamente, mentre Zip crea il file zippato, riesce ad inserire i files che sono contenuti al primo livello della directory ma alla prima sottocartella smette di inserire i files (ma non dà eccezioni e soprattutto, guardando le stampe di sistema, percorre tutto l'albero delle directory... quindi non capisco perchè non si degna nemmeno di dirmi che c'è un errore!!!)

    ciao e grazie!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.