Comment zipper et d�zipper des fichiers en Java

Vue d’ensemble

Cet article vous apprendra � compresser par programme des fichiers Zip � l’aide de diverses m�thodes utilisant l’API Java et des exemples de code. Vous apprendrez � zipper ou � compresser un ou plusieurs fichiers, ainsi qu’� zipper des fichiers simultan�ment. Vous apprendrez �galement � d�compresser ou d�zipper des fichiers.

Zipper ou compresser des fichiers en Java et d�compresser ou d�zipper des fichiers en Java

L’API Aspose.ZIP vous permet de compresser et de d�compresser des fichiers sans vous soucier de la structure du fichier sous-jacent. Cet article montre comment travailler avec la compression d’un seul ou de plusieurs fichiers.

Compression de fichiers

Compression d’un seul fichier

�tapes:Compression d’un fichier unique en Java

  1. Cr�ez un file output stream avec le nom souhait� de votre fichier zip de sortie.
  2. Cr�ez un flux d’entr�e de fichier du fichier de donn�es � compresser.
  3. Cr�ez une instance de la classe Archive et transmettez-lui une instance de la classe ArchiveEntrySettings.
  4. Ajoutez le fichier de donn�es cr�� � l’�tape 2 � l’aide de la m�thode Archive.createEntry.
  5. Zipper le fichier de donn�es � l’aide de la m�thode Archive.save et lui transmettre le flux de fichiers cr�� � l’�tape 1.
 1try (FileOutputStream zipFile = new FileOutputStream(dataDir + "CompressSingleFile_out.zip")) {
 2    /Fichier  ajouter  l'archive
 3    try (FileInputStream source1 = new FileInputStream(dataDir + "alice29.txt")) {
 4        try (Archive archive = new Archive(new ArchiveEntrySettings())) {
 5            archive.createEntry("alice29.txt", source1) ;
 6            archive.save(zipFile) ;
 7        }
 8    }
 9} catch (IOException ex) {
10    System.out.println(ex) ;
11}

Compression de plusieurs fichiers

�tapes:Compression de plusieurs fichiers en Java

  1. Cr�ez un flux de fichiers avec le nom souhait� de votre fichier zip de sortie.
  2. Cr�ez un flux de fichiers pour le premier fichier de donn�es � compresser.
  3. Cr�ez un flux de fichiers pour le deuxi�me fichier de donn�es � compresser.
  4. Cr�ez une instance de la classe Archive.
  5. Ajoutez les fichiers de donn�es cr��s aux �tapes 2 et 3 � l’aide de la m�thode Archive.createEntry.
  6. Cr�ez une instance de la classe ArchiveSaveOptions.
  7. Zipper les fichiers de donn�es � l’aide de la m�thode Archive.save et lui transmettre le flux de fichiers cr�� � l’�tape 1 et l’instance de ArchiveSaveOptions cr��e � l’�tape pr�c�dente.
 1try (FileOutputStream zipFile = new FileOutputStream(dataDir + "CompressSingleFile_out.zip")) {
 2    try (FileInputStream source1 = new FileInputStream(dataDir + "alice29.txt")) {
 3        try (FileInputStream source2 = new FileInputStream(dataDir + "asyoulik.txt")) {
 4            try (Archive archive = new Archive(new ArchiveEntrySettings())) {
 5                archive.createEntry("alice29.txt", source1) ;
 6                archive.createEntry("asyoulik.txt", source2) ;
 7                ArchiveSaveOptions options = new ArchiveSaveOptions() ;
 8                options.setEncoding(StandardCharsets.US_ASCII) ;
 9                options.setArchiveComment("Il y a deux po�mes du corpus Canterbury") ;
10                archive.save(zipFile, options) ;
11            }
12        }
13    }
14} catch (IOException ex) {
15    System.out.println(ex) ;
16}

Compression des fichiers par Info Fichier

�tapes:Compresser des fichiers par information de fichier en Java

  1. Ouvrez un flux de sortie de fichier avec le nom souhait� de votre fichier zip de sortie.
  2. Cr�ez l’objet File de votre premier fichier de donn�es � compresser.
  3. Cr�ez l’objet File de votre deuxi�me fichier de donn�es � compresser.
  4. Cr�ez une instance de la classe Archive.
  5. Ajoutez les fichiers de donn�es cr��s aux �tapes 2 et 3 � l’aide de la m�thode Archive.createEntry.
  6. Cr�ez une instance de la classe ArchiveSaveOptions.
  7. Zipper les fichiers de donn�es � l’aide de la m�thode Archive.save et lui transmettre le flux de fichiers cr�� � l’�tape 1 et l’instance de ArchiveSaveOptions cr��e � l’�tape pr�c�dente.
 1try (FileOutputStream zipFile = new FileOutputStream(dataDir + "CompressFilesByFileInfo_out.zip")) {
 2    Fichier fi1 = nouveau Fichier(dataDir + "alice29.txt") ;
 3    Fichier fi2 = nouveau fichier (dataDir + "fields.c") ;
 4    try (Archive archive = new Archive()) {
 5        archive.createEntry("alice29.txt", fi1) ;
 6        archive.createEntry("fields.c", fi2) ;
 7        ArchiveSaveOptions options = new ArchiveSaveOptions() ;
 8        options.setEncoding(StandardCharsets.US_ASCII) ;
 9        archive.save(zipFile, options) ;
10    }
11} catch (IOException ignored) {
12    System.out.println(ex) ;
13}

Stockage de fichiers dans des archives sans compression

Etapes:Stockage de fichiers dans des archives sans compression en utilisant Java

  1. Ouvrez un flux de sortie de fichier avec le nom souhait� de votre fichier zip de sortie.
  2. Cr�ez des objets File pour vos fichiers de donn�es � stocker dans l’archive.
  3. Cr�ez une instance de la classe ArchiveEntrySettings et transmettez-lui une instance de la classe StoreCompressionSettings.
  4. Cr�ez une instance de la classe Archive et transmettez-lui une instance de la classe ArchiveEntrySettings cr��e � l’�tape pr�c�dente.
  5. Ajouter les objets Fichier cr��s � l’�tape 2 en utilisant la m�thode Archive.createEntry.
  6. Cr�ez une instance de ArchiveSaveOptions et d�finissez l’encodage � StandardCharsets.US_ASCII en utilisant la m�thode ArchiveSaveOptions.setEncoding.
  7. Zippez les fichiers de donn�es � l’aide de la m�thode Archive.save et passez-lui le flux de fichiers cr�� � l’�tape 1 et l’instance de ArchiveSaveOptions cr��e � l’�tape pr�c�dente.
 1try (FileOutputStream zipFile = new FileOutputStream(dataDir + "StoreMultipleFilesWithoutCompression_out.zip")) {
 2    Fichier fi1 = nouveau Fichier(dataDir + "alice29.txt") ;
 3    Fichier fi2 = nouveau fichier (dataDir + "fields.c") ;
 4    try (Archive archive = new Archive(new ArchiveEntrySettings(new StoreCompressionSettings()))) {
 5        archive.createEntry("alice29.txt", fi1) ;
 6        archive.createEntry("fields.c", fi2) ;
 7        ArchiveSaveOptions options = new ArchiveSaveOptions() ;
 8        options.setEncoding(StandardCharsets.US_ASCII) ;
 9        archive.save(zipFile, options) ;
10    }
11} catch (IOException ignored) {
12    System.out.println(ex) ;
13}

Utilisation du parall�lisme pour compresser les fichiers

Steps:Utiliser le parall�lisme pour compresser des fichiers en utilisant Java

  1. Ouvrez un flux de sortie de fichier avec le nom souhait� de votre fichier zip de sortie.
  2. Ouvrez des flux d’entr�e de fichiers pour vos premier et deuxi�me fichiers de donn�es � compresser.
  3. Cr�ez une instance de la classe Archive.
  4. Ajoutez les fichiers de donn�es cr��s � l’�tape 2 � l’aide de la m�thode Archive.createEntry.
  5. Cr�er une instance de la classe ParallelOptions et d�finir ParallelCompressionMode.Always en utilisant la m�thode ParallelOptions.setParallelCompressInMemory.
  6. Cr�er une instance de ArchiveSaveOptions et d�finir les options parall�les avec l’instance ci-dessus en utilisant la m�thode ArchiveSaveOptions.setParallelOptions.
  7. Zippez les fichiers de donn�es � l’aide de la m�thode Archive.save et passez-lui le flux de fichiers cr�� � l’�tape 1 et l’instance de ArchiveSaveOptions cr��e � l’�tape pr�c�dente.
 1try (FileOutputStream zipFile = new FileOutputStream(dataDir + "UsingParallelismToCompressFiles_out.zip")) {
 2    try (FileInputStream source1 = new FileInputStream(dataDir + "alice29.txt")) {
 3        try (FileInputStream source2 = new FileInputStream(dataDir + "asyoulik.txt")) {
 4            try (Archive archive = new Archive(new ArchiveEntrySettings())) {
 5                archive.createEntry("alice29.txt", source1) ;
 6                archive.createEntry("asyoulik.txt", source2) ;
 7                ParallelOptions parallelOptions = new ParallelOptions() ;
 8                parallelOptions.setParallelCompressInMemory(ParallelCompressionMode.Always) ;
 9                ArchiveSaveOptions options = new ArchiveSaveOptions() ;
10                options.setParallelOptions(parallelOptions) ;
11                options.setEncoding(StandardCharsets.US_ASCII) ;
12                options.setArchiveComment("Il y a deux po�mes du corpus Canterbury") ;
13                archive.save(zipFile, options) ;
14            }
15        }
16    }
17} catch (IOException ex) {
18    System.out.println(ex) ;
19}

Compression LZMA dans une archive ZIP

L’algorithme Lempel-Ziv-Markov chain (LZMA) est un algorithme utilis� pour effectuer une compression de donn�es sans perte. LZMA utilise un algorithme de compression par dictionnaire, le flux compress� est un flux de bits. La compression LZMA dans l’archive ZIP permet aux conteneurs ZIP de contenir des entr�es compress�es LZMA. L’exemple de code suivant montre la mise en �uvre de la compression LZMA � l’aide de l’API Aspose.ZIP.

�tapes:Compression LZMA dans une archive ZIP � l’aide de Java

  1. Ouvrez un flux de sortie de fichier avec le nom souhait� de votre fichier zip de sortie.
  2. Cr�ez une instance de la classe ArchiveEntrySettings et passez-lui une instance de la classe LzmaCompressionSettings.
  3. Cr�ez une instance de la classe Archive et transmettez-lui l’instance de ArchiveEntrySettings cr��e ci-dessus.
  4. Ajoutez les fichiers de donn�es � compresser via les chemins d’acc�s aux fichiers � l’aide de la m�thode Archive.createEntry.
  5. Zippez les fichiers de donn�es � l’aide de la m�thode Archive.save.
1try (FileOutputStream zipFile = new FileOutputStream(dataDir + "LZMACompression_out.zip")) {
2    try (Archive archive = new Archive(new ArchiveEntrySettings(new LzmaCompressionSettings()))) {
3        archive.createEntry("sample.txt", dataDir + "sample.txt") ;
4        archive.save(zipFile) ;
5    }
6} catch (IOException ignored) {
7    System.out.println(ex) ;
8}

Compression BZip2 dans une archive ZIP

Les param�tres de compression BZip2 permettent au conteneur ZIP de contenir des entr�es compress�es BZip2. L’exemple de code suivant montre la mise en �uvre de la compression BZip2 � l’aide de l’API Aspose.ZIP.

�tapes:Compression BZip2 dans une archive ZIP � l’aide de Java

  1. Ouvrez un flux de sortie de fichier avec le nom souhait� de votre fichier zip de sortie.
  2. Cr�ez une instance de la classe ArchiveEntrySettings et passez-lui une instance de la classe Bzip2CompressionSettings.
  3. Cr�ez une instance de la classe Archive et transmettez-lui l’instance de ArchiveEntrySettings cr��e ci-dessus.
  4. Ajoutez les fichiers de donn�es � compresser via les chemins d’acc�s aux fichiers � l’aide de la m�thode Archive.createEntry.
  5. Zippez les fichiers de donn�es � l’aide de la m�thode Archive.save.
1try (FileOutputStream zipFile = new FileOutputStream(dataDir + "Bzip2Compression_out.zip")) {
2    try (Archive archive = new Archive(new ArchiveEntrySettings(new Bzip2CompressionSettings()))) {
3        archive.createEntry("sample.txt", dataDir + "sample.txt") ;
4        archive.save(zipFile) ;
5    }
6} catch (IOException ignored) {
7    System.out.println(ex) ;
8}

D�compression des archives

D�compression d’une archive en un seul fichier

 1try (FileInputStream fs = new FileInputStream(dataDir + "CompressSingleFile_out.zip")) {
 2    try (Archive archive = new Archive(fs)) {
 3        int[] percentReady = new int[] {0} ;
 4        archive.getEntries().get(0).setExtractionProgressed(new Event<ProgressEventArgs>() {
 5            @Override
 6            public void invoke(Object sender, ProgressEventArgs progressEventArgs) {
 7                int percent = (int) ((100 * progressEventArgs.getProceededBytes())
 8                        / ((ArchiveEntry) sender).getUncompressedSize()) ;
 9                if (percent > percentReady[0])
10                {
11                    System.out.println(percent + "% decompressed") ;
12                    percentReady[0] = percent ;
13                }
14            }
15        }) ;
16        archive.getEntries().get(0).extract(dataDir + "alice_extracted_out.txt") ;
17    }
18} catch (IOException ex) {
19    System.out.println(ex) ;
20}

D�compression d’une archive contenant plusieurs fichiers

 1try (FileInputStream fs = new FileInputStream(dataDir + "CompressMultipleFiles_out.zip")) {
 2    StringBuilder sb = new StringBuilder("Les entr�es sont : ") ;
 3    int[] percentReady = new int[] {0} ;
 4    ArchiveLoadOptions options = new ArchiveLoadOptions() ;
 5    options.setEntryListed(new Event<EntryEventArgs>() {
 6        @Override
 7        public void invoke(Object sender, EntryEventArgs entryEventArgs) {
 8            sb.append(entryEventArgs.getEntry().getName()).append(", ") ;
 9        }
10    }) ;
11    options.setEntryExtractionProgressed(new Event<ProgressEventArgs>() {
12        @Override
13        public void invoke(Object sender, ProgressEventArgs progressEventArgs) {
14            int percent = (int) ((100 * progressEventArgs.getProceededBytes())
15                    / ((ArchiveEntry) sender).getUncompressedSize()) ;
16            if (percent > percentReady[0])
17            {
18                System.out.println(percent + "% compressed") ;
19                percentReady[0] = percent ;
20            }
21        }
22    }) ;
23    try (Archive archive = new Archive(fs, options)) {
24        System.out.println(sb.substring(0, sb.length() - 2)) ;
25        try (FileOutputStream extracted = new FileOutputStream(dataDir + "alice_extracted_out.txt")) {
26            try (InputStream decompressed = archive.getEntries().get(0).open()) {
27                byte[] buffer = new byte[8192] ;
28                int bytesRead ;
29                while (0 < (bytesRead = decompressed.read(buffer, 0, buffer.length))) {
30                    extracted.write(buffer, 0, bytesRead) ;
31                }
32                // Lecture du flux d�compress� dans le fichier d'extraction.
33            }
34        }
35        percentReady[0] = 0 ;
36        archive.getEntries().get(1).extract(dataDir + "asyoulik_extracted_out.txt") ;
37    }
38} catch (IOException ex) {
39    System.out.println(ex) ;
40}

Extraire une archive stock�e sans compression

 1try (FileInputStream zipFile = new FileInputStream(dataDir + "StoreMultipleFilesWithoutCompression_out.zip")) {
 2    try (Archive archive = new Archive(zipFile )) {
 3        try (FileOutputStream extracted = new FileOutputStream(dataDir + "alice_extracted_store_out.txt")) {
 4            try (InputStream stored = archive.getEntries().get(0).open()) {
 5                byte[] buffer = new byte[8192] ;
 6                int bytesRead ;
 7                while (0 < (bytesRead = stored.read(buffer, 0, buffer.length))) {
 8                    extrait.write(buffer, 0, bytesRead) ;
 9                }
10                // Lecture du flux stock� vers le fichier d'extraction.
11            }
12        }
13        try (FileOutputStream extracted = new FileOutputStream(dataDir + "asyoulik_extracted_store_out.txt")) {
14            try (InputStream stored = archive.getEntries().get(1).open()) {
15                byte[] buffer = new byte[8192] ;
16                int bytesRead ;
17                while (0 < (bytesRead = stored.read(buffer, 0, buffer.length))) {
18                    extrait.write(buffer, 0, bytesRead) ;
19                }
20                // Lecture du flux stock� vers le fichier d'extraction.
21            }
22        }
23    }
24} catch (IOException ex) {
25    System.out.println(ex) ;
26}
Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.