Как застегнуть и распаковать файлы в Java
Обзор
Эта статья научит вас, как программно сжать файлы ZIP, используя различные методы, использующие Java API и пример кода. Вы узнаете, как застегнуть или сжимать один или несколько файлов, а также как ZIP -файлы одновременно. Вы также узнаете, как декомпрессировать или распаковать файлы.
ZIP или сжатие файлов в файлах Java и декомпрессат или UNZIP в Java
Aspose.zip API позволяет вам сжимать и декомпрессировать файлы, не беспокоясь о базовой структуре файлов. В этой статье показана работа с одним, а также с несколькими файлами сжатия.
Сжатие файлов
Сжатие отдельного файла
шаги: сжатие отдельного файла в java
- Создайте File Wouting Stream с желаемым именем вашего выходного ZIP -файла.
- Создать File Fount Stream файла данных для сжатия.
- Создайте экземпляр Archive класс и пропустите его экземпляр ArchiveEntrySettings класса.
- Добавьте файл данных, созданный на шаге 2, используя метод archive.createEntry.
- Застегивайте файл данных, используя метод archive.save и передайте его поток файла, созданный на шаге 1.
1try (fileOutputStream ZipFile = new FileOutputStream (datadir + "compresssinglefile_out.zip")) {
2 // файл для добавления в архив
3 try (fileInputStream Source1 = new FileInputStream (datadir + "alice29.txt")) {
4 Try (Archive Archive = новый 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}
Сжатие нескольких файлов
шаги: сжатие нескольких файлов в java
- Создайте поток файла с желаемым именем вашего выходного ZIP -файла.
- Создайте поток файла первого файла данных для сжатия.
- Создайте поток файла второго файла данных для сжатия.
- Создайте экземпляр Archive класса.
- Добавьте файлы данных, созданные на шаге 2 и шаге 3, используя метод archive.createEntry.
- Создайте экземпляр ArchivesaveOptions класс.
- Застегивайте файлы данных, используя метод archive.save и передайте его поток файла, созданный на шаге 1, и экземпляр ArchivesaveOptions, созданный на шаге выше.
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 = новый 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 («Есть два стиха из Кентерберийского корпуса»);
10 archive.save (zipfile, опции);
11 }
12 }
13 }
14} catch (ioException ex) {
15 System.out.println (Ex);
16}
Сжатие файлов с помощью информации о файле
Шаги: Сжатие файлов с помощью файла в Java
- Откройте выходной поток файла с желаемым именем вашего выходного ZIP -файла.
- Создать файл объект вашего первого файла данных для сжатия.
- Create File объект вашего второго файла данных для сжатия.
- Создайте экземпляр Archive класса.
- Добавьте файлы данных, созданные на шаге 2 и шаге 3, используя метод archive.createEntry.
- Создайте экземпляр ArchivesaveOptions класса.
- Застегивайте файлы данных, используя метод archive.save и передайте его поток файла, созданный на шаге 1, и экземпляр ArchivesaveOptions, созданный на шаге выше.
1try (fileOutputStream ZipFile = new FileOutputStream (datadir + "compressfilesbyfileinfo_out.zip")) {
2 File fi1 = новый файл (datadir + "alice29.txt");
3 File fi2 = новый файл (datadir + "fields.c");
4 Попробуйте (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, опции);
10 }
11} catch (ioException игнорируется) {
12 System.out.println (Ex);
13}
Хранение файлов в архивах без сжатия
Шаги: Хранение файлов в архивах без сжатия с использованием java
- Откройте выходной поток файла с желаемым именем вашего выходного ZIP -файла.
- Создайте файл объекты для хранения ваших файлов данных в архиве.
- Создайте экземпляр ArchiveEntrySettings класса и пропустите его экземпляр Storecompressionsettings класса.
- Создайте экземпляр Archive класса и передайте его экземпляр ArchiveEntrySettings класса, созданного на шаге выше.
- Добавить Файл Объекты, созданные на шаге 2, используя метод archive.createEntry.
- Создайте экземпляр ArchivesaveOptions и установите кодирование Standardcharsets.us_ascii с использованием метода archivesaveoptions.setencoding.
- Застегивайте файлы данных, используя метод archive.save и передайте его поток файла, созданный на шаге 1, и экземпляр ArchivesaveOptions, созданный на шаге выше.
1try (fileOutputStream ZipFile = new FileOutputStream (dataDir + "storeMultipleFileswithoutcompression_out.zip")) {
2 File fi1 = новый файл (datadir + "alice29.txt");
3 File fi2 = новый файл (datadir + "fields.c");
4 Попробуйте (Archive Archive = новый архив (новый архивизированные задачи (новые 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, опции);
10 }
11} catch (ioException игнорируется) {
12 System.out.println (Ex);
13}
Использование параллелизма для сжатия файлов
Шаги: Использование параллелизма для сжатия файлов с использованием java
- Откройте выходной поток файла с желаемым именем вашего выходного ZIP -файла.
- Откройте потоки ввода файла для ваших первых и второго файлов данных, которые будут сжаты.
- Создайте экземпляр Archive класса.
- Добавьте файлы данных, созданные на шаге 2, используя метод Archive.createEntry.
- Создайте экземпляр Paralleloptions и установите ParallelCompressionMode.Always Использование ParalleLoptions.setParalleLcompressInmemory Метод.
- Создайте экземпляр ArchivesaveOptions и установите параллельные паралности с приведенным выше экземпляром с использованием метода ArchivesaveOptions.setParalloptions.
- Застегивайте файлы данных, используя метод archive.save и передайте его поток файла, созданный на шаге 1, и экземпляр ArchivesaveOptions, созданный на шаге выше.
1try (fileOutputStream Zipfile = new FileOutputStream (datadir + "с помощью PparalleLismTocompressFiles_out.zip")) {
2 try (fileInputStream Source1 = new FileInputStream (datadir + "alice29.txt")) {
3 try (fileInputStream Source2 = new FileInputStream (datadir + "asyoulik.txt")) {
4 Try (Archive Archive = новый Archive (New ArchiveEntrySettings ())) {
5 Archive.createEntry ("alice29.txt", Source1);
6 Archive.createEntry ("asyoulik.txt", Source2);
7 Paralleloptions Paralleloptions = new Paralleloptions ();
8 paralleloptions.setparallelcpressinmemory (parallelcompressionmode.always);
9 ArchivesaveOptions Options = new ArchivesaveOptions ();
10 Options.SetParalleLoptions (Paralleloptions);
11 Options.SetencoDing (StandardCharsets.us_ascii);
12 Options.SetArchiveComment («Есть два стиха из Кентерберийского корпуса»);
13 archive.save (zipfile, опции);
14 }
15 }
16 }
17} catch (ioException ex) {
18 System.out.println (Ex);
19}
Сжатие LZMA в архиве ZIP
Алгоритм цепочки Lempel - Ziv - Маркова ( lzma **) - это алгоритм, используемый для выполнения сжатия данных без потерь. LZMA использует алгоритм сжатия словаря, сжатый поток представляет собой поток битов. Сжатие LZMA в архиве ZIP позволяет ZIP -контейнерам содержать записи сжатых LZMA. В следующем примере кода показана реализация сжатия LZMA с использованием API Aspose.zip.
шаги: сжатие Lzma в архиве Zip с использованием java
- Откройте выходной поток файла с желаемым именем вашего выходного ZIP -файла.
- Создайте экземпляр ArchiveEntrySettings класса и пропустите его экземпляр lzmacompressionsettings класса.
- Создайте экземпляр Archive класса и передайте его экземпляр ArchiveEntrySettings, созданные выше.
- Добавьте файлы данных для сжатия с помощью путей файлов с помощью метода archive.createEntry.
- Застегивайте файлы данных с помощью метода archive.save.
1try (fileOutputStream ZipFile = new FileOutputStream (datadir + "lzmacompression_out.zip")) {
2 Попробуйте (Archive Archive = New Archive (New ArchiveEntrySettings (New LzMacompressionSettings ()))) {
3 archive.createEntry ("sample.txt", datadir + "sample.txt");
4 Archive.save (Zipfile);
5 }
6} catch (ioException игнорируется) {
7 System.out.println (Ex);
8}
Сжатие BZIP2 в архиве ZIP
Настройки сжатия BZIP2 позволяют ZIP -контейнеру содержать сжатые записи BZIP2. В следующем примере кода показана реализация сжатия BZIP2 с использованием API Aspose.zip.
шаги: bzip2 Сжатие в архиве zip с использованием java
- Откройте выходной поток файла с желаемым именем вашего выходного ZIP -файла.
- Создайте экземпляр ArchiveEntrySettings класса и пропустите его экземпляр bzip2compressionsettings класса.
- Создайте экземпляр Archive класса и передайте его экземпляр ArchiveEntrySettings, созданные выше.
- Добавьте файлы данных для сжатия с помощью путей файлов с помощью метода archive.createEntry.
- Застегивайте файлы данных, используя метод archive.save.
1try (fileOutputStream ZipFile = new FileOutputStream (datadir + "bzip2compression_out.zip")) {
2 Попробуйте (Archive Archive = новый архив (новый архивизированные задачи (new bzip2compressionsettings ()))) {
3 archive.createEntry ("sample.txt", datadir + "sample.txt");
4 Archive.save (Zipfile);
5 }
6} catch (ioException игнорируется) {
7 System.out.println (Ex);
8}
Декомпрессирующие архивы
Архив декомпрессации с одним файлом
1try (fileInputStream fs = new FileInputStream (datadir + "compresssinglefile_out.zip")) {
2 Попробуйте (Archive Archive = New Archive (fs)) {
3 int [] inpityRead = new int [] {0};
4 archive.getEntries (). get (0) .setExtractionProgressed (New Event <prosingEventargs> () {
5 @Override
6 public void indoke (отправитель объектов, ProgressEventargs ProgressEventargs) {
7 int procet = (int) ((100 * ProgressEventargs.getProudeedBytes ())
8 / ((ArchiveEntry) отправитель) .getUncompressedSize ());
9 if (процент> процент готово [0])
10 {
11 System.out.println (процент + "% декомпрессирован");
12 процент готовы [0] = процент;
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}
Архив распаковки с несколькими файлами
1try (fileInputStream fs = new FileInputStream (datadir + "compressMultiplefiles_out.zip")) {
2 StringBuilder SB = new StringBuilder ("Записи:");
3 int [] inpityRead = new int [] {0};
4 Archiveloadoptions Options = new ArchiveLodoptions ();
5 Options.SetEntryListed (New Event <pretniEventargs> () {
6 @Override
7 public void indoke (отправитель объектов, enteventargs enteventargs) {
8 SB.Append (enteVentargs.getEntry (). getName ()). Append (",");
9 }
10 });
11 Options.setEntryExtractionProgressed (New Event <progressEventargs> () {
12 @Override
13 public void indoke (отправитель объектов, ProgressEventargs ProgressEventargs) {
14 int procet = (int) ((100 * ProgressEventargs.getProudeedBytes ())
15 / ((ArchiveEntry) отправитель) .getUncompressedSize ());
16 if (процент> процент готово [0])
17 {
18 System.out.println (процент + "% сжатый");
19 процент готовы [0] = процент;
20 }
21 }
22 });
23 Попробуйте (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 байт [] буфер = новый байт [8192];
28 int bytesread;
29 while (0 <(bytesread = decompressed.read (buffer, 0, buffer.length))) {
30 Извлечен.
31 }
32 // Читать из декомпрессированного потока в извлечение файла.
33 }
34 }
35 процент готовы [0] = 0;
36 archive.getEntries (). get (1) .extract (datadir + "asyoulik_extracted_out.txt");
37 }
38} catch (ioException ex) {
39 System.out.println (Ex);
40}
Извлечение хранимого архива без сжатия
1try (fileInputStream ZipFile = new FileInputStream (datadir + "StoreMultipleFileswithoutCompression_out.zip")) {
2 попробуйте (архив архив = новый архив (Zipfile)) {
3 try (fileOutputStream Extracted = new FileOutPutStream (datAdir + "alice_extracted_store_out.txt")) {
4 try (inputstream nase = archive.getEntries (). get (0) .open ()) {
5 байт [] буфер = новый байт [8192];
6 int bytesread;
7 while (0 <(bytesread = hare.read (buffer, 0, buffer.length))) {
8 Извлечен.
9 }
10 // Читать из сохраненного потока для извлечения файла.
11 }
12 }
13 try (fileOutputStream Extracted = new FileOutputStream (datAdir + "asyoulik_extracted_store_out.txt")) {
14 try (inputstream nase = archive.getEntries (). get (1) .open ()) {
15 байт [] буфер = новый байт [8192];
16 int bytesread;
17 while (0 <(bytesread = hare.read (buffer, 0, buffer.length))) {
18 Извлечен.
19 }
20 // Читать из сохраненного потока для извлечения файла.
21 }
22 }
23 }
24} catch (ioException ex) {
25 System.out.println (Ex);
26}