Partage
  • Partager sur Facebook
  • Partager sur Twitter

Zip et CRC32

    28 janvier 2009 à 11:42:22

    Bonjour,

    J'ai testé ce code pour créer un zip en utilisant CRC (http://blogs.sun.com/CoreJavaTechTips/entry/creating_zip_and_jar_files):

    import java.util.zip.*;
    import java.io.*;
    
    public class ZipIt {
        public static void main(String args[]) throws IOException {
            if (args.length < 2) {
                System.err.println("usage: java ZipIt Zip.zip file1 file2 file3");
                System.exit(-1);
            }
            File zipFile = new File(args[0]);
            if (zipFile.exists()) {
                System.err.println("Zip file already exists, please try another");
                System.exit(-2);
            }
            FileOutputStream fos = new FileOutputStream(zipFile);
            ZipOutputStream zos = new ZipOutputStream(fos);
            int bytesRead;
            byte[] buffer = new byte[1024];
            CRC32 crc = new CRC32();
            for (int i=1, n=args.length; i < n; i++) {
                String name = args[i];
                File file = new File(name);
                if (!file.exists()) {
                    System.err.println("Skipping: " + name);
                    continue;
                }
                BufferedInputStream bis = new BufferedInputStream(
                    new FileInputStream(file));
                crc.reset();
                while ((bytesRead = bis.read(buffer)) != -1) {
                    crc.update(buffer, 0, bytesRead);
                }
                bis.close();
                // Reset to beginning of input stream
                bis = new BufferedInputStream(
                    new FileInputStream(file));
                ZipEntry entry = new ZipEntry(name);
                //entry.setMethod(ZipEntry.STORED);
                //entry.setCompressedSize(file.length());
                //entry.setSize(file.length());
                entry.setCrc(crc.getValue());
                zos.putNextEntry(entry);
                while ((bytesRead = bis.read(buffer)) != -1) {
                    zos.write(buffer, 0, bytesRead);
                }
                bis.close();
            }
            zos.close();
        }
    }
    


    Le zip est bien généré mais quand j'essaie de lire dans le zip généré et d'afficher pour chaque fichier du zip sa taille et son crc, les méthodes getSize() et getCrc() de ZipEntry me renvoient -1. Quelqu'un sait ce qui ne va pas et comment faire pour avoir les valeurs?

    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      28 janvier 2009 à 17:36:02

      Je pense que, d'après la doc, il faut spécifier ces données lors de la compression avec setSize et setCrc.
      • Partager sur Facebook
      • Partager sur Twitter

      Zip et CRC32

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown