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
- Cr�ez un file output stream avec le nom souhait� de votre fichier zip de sortie.
- Cr�ez un flux d’entr�e de fichier du fichier de donn�es � compresser.
- Cr�ez une instance de la classe Archive et transmettez-lui une instance de la classe ArchiveEntrySettings.
- Ajoutez le fichier de donn�es cr�� � l’�tape 2 � l’aide de la m�thode Archive.createEntry.
- 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
- Cr�ez un flux de fichiers avec le nom souhait� de votre fichier zip de sortie.
- Cr�ez un flux de fichiers pour le premier fichier de donn�es � compresser.
- Cr�ez un flux de fichiers pour le deuxi�me fichier de donn�es � compresser.
- Cr�ez une instance de la classe Archive.
- Ajoutez les fichiers de donn�es cr��s aux �tapes 2 et 3 � l’aide de la m�thode Archive.createEntry.
- Cr�ez une instance de la classe ArchiveSaveOptions.
- 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
- Ouvrez un flux de sortie de fichier avec le nom souhait� de votre fichier zip de sortie.
- Cr�ez l’objet File de votre premier fichier de donn�es � compresser.
- Cr�ez l’objet File de votre deuxi�me fichier de donn�es � compresser.
- Cr�ez une instance de la classe Archive.
- Ajoutez les fichiers de donn�es cr��s aux �tapes 2 et 3 � l’aide de la m�thode Archive.createEntry.
- Cr�ez une instance de la classe ArchiveSaveOptions.
- 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
- Ouvrez un flux de sortie de fichier avec le nom souhait� de votre fichier zip de sortie.
- Cr�ez des objets File pour vos fichiers de donn�es � stocker dans l’archive.
- Cr�ez une instance de la classe ArchiveEntrySettings et transmettez-lui une instance de la classe StoreCompressionSettings.
- Cr�ez une instance de la classe Archive et transmettez-lui une instance de la classe ArchiveEntrySettings cr��e � l’�tape pr�c�dente.
- Ajouter les objets Fichier cr��s � l’�tape 2 en utilisant la m�thode Archive.createEntry.
- Cr�ez une instance de ArchiveSaveOptions et d�finissez l’encodage � StandardCharsets.US_ASCII en utilisant la m�thode ArchiveSaveOptions.setEncoding.
- 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
- Ouvrez un flux de sortie de fichier avec le nom souhait� de votre fichier zip de sortie.
- Ouvrez des flux d’entr�e de fichiers pour vos premier et deuxi�me fichiers de donn�es � compresser.
- Cr�ez une instance de la classe Archive.
- Ajoutez les fichiers de donn�es cr��s � l’�tape 2 � l’aide de la m�thode Archive.createEntry.
- Cr�er une instance de la classe ParallelOptions et d�finir ParallelCompressionMode.Always en utilisant la m�thode ParallelOptions.setParallelCompressInMemory.
- 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.
- 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
- Ouvrez un flux de sortie de fichier avec le nom souhait� de votre fichier zip de sortie.
- Cr�ez une instance de la classe ArchiveEntrySettings et passez-lui une instance de la classe LzmaCompressionSettings.
- Cr�ez une instance de la classe Archive et transmettez-lui l’instance de ArchiveEntrySettings cr��e ci-dessus.
- Ajoutez les fichiers de donn�es � compresser via les chemins d’acc�s aux fichiers � l’aide de la m�thode Archive.createEntry.
- 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
- Ouvrez un flux de sortie de fichier avec le nom souhait� de votre fichier zip de sortie.
- Cr�ez une instance de la classe ArchiveEntrySettings et passez-lui une instance de la classe Bzip2CompressionSettings.
- Cr�ez une instance de la classe Archive et transmettez-lui l’instance de ArchiveEntrySettings cr��e ci-dessus.
- Ajoutez les fichiers de donn�es � compresser via les chemins d’acc�s aux fichiers � l’aide de la m�thode Archive.createEntry.
- 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}