Как застегнуть и распаковать файлы в Java

Обзор

Эта статья научит вас, как программно сжать файлы ZIP, используя различные методы, использующие Java API и пример кода. Вы узнаете, как застегнуть или сжимать один или несколько файлов, а также как ZIP -файлы одновременно. Вы также узнаете, как декомпрессировать или распаковать файлы.

ZIP или сжатие файлов в файлах Java и декомпрессат или UNZIP в Java

Aspose.zip API позволяет вам сжимать и декомпрессировать файлы, не беспокоясь о базовой структуре файлов. В этой статье показана работа с одним, а также с несколькими файлами сжатия.

Сжатие файлов

Сжатие отдельного файла

шаги: сжатие отдельного файла в java

  1. Создайте File Wouting Stream с желаемым именем вашего выходного ZIP -файла.
  2. Создать File Fount Stream файла данных для сжатия.
  3. Создайте экземпляр Archive класс и пропустите его экземпляр ArchiveEntrySettings класса.
  4. Добавьте файл данных, созданный на шаге 2, используя метод archive.createEntry.
  5. Застегивайте файл данных, используя метод 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

  1. Создайте поток файла с желаемым именем вашего выходного ZIP -файла.
  2. Создайте поток файла первого файла данных для сжатия.
  3. Создайте поток файла второго файла данных для сжатия.
  4. Создайте экземпляр Archive класса.
  5. Добавьте файлы данных, созданные на шаге 2 и шаге 3, используя метод archive.createEntry.
  6. Создайте экземпляр ArchivesaveOptions класс.
  7. Застегивайте файлы данных, используя метод 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

  1. Откройте выходной поток файла с желаемым именем вашего выходного ZIP -файла.
  2. Создать файл объект вашего первого файла данных для сжатия.
  3. Create File объект вашего второго файла данных для сжатия.
  4. Создайте экземпляр Archive класса.
  5. Добавьте файлы данных, созданные на шаге 2 и шаге 3, используя метод archive.createEntry.
  6. Создайте экземпляр ArchivesaveOptions класса.
  7. Застегивайте файлы данных, используя метод 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

  1. Откройте выходной поток файла с желаемым именем вашего выходного ZIP -файла.
  2. Создайте файл объекты для хранения ваших файлов данных в архиве.
  3. Создайте экземпляр ArchiveEntrySettings класса и пропустите его экземпляр Storecompressionsettings класса.
  4. Создайте экземпляр Archive класса и передайте его экземпляр ArchiveEntrySettings класса, созданного на шаге выше.
  5. Добавить Файл Объекты, созданные на шаге 2, используя метод archive.createEntry.
  6. Создайте экземпляр ArchivesaveOptions и установите кодирование Standardcharsets.us_ascii с использованием метода archivesaveoptions.setencoding.
  7. Застегивайте файлы данных, используя метод 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

  1. Откройте выходной поток файла с желаемым именем вашего выходного ZIP -файла.
  2. Откройте потоки ввода файла для ваших первых и второго файлов данных, которые будут сжаты.
  3. Создайте экземпляр Archive класса.
  4. Добавьте файлы данных, созданные на шаге 2, используя метод Archive.createEntry.
  5. Создайте экземпляр Paralleloptions и установите ParallelCompressionMode.Always Использование ParalleLoptions.setParalleLcompressInmemory Метод.
  6. Создайте экземпляр ArchivesaveOptions и установите параллельные паралности с приведенным выше экземпляром с использованием метода ArchivesaveOptions.setParalloptions.
  7. Застегивайте файлы данных, используя метод 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

  1. Откройте выходной поток файла с желаемым именем вашего выходного ZIP -файла.
  2. Создайте экземпляр ArchiveEntrySettings класса и пропустите его экземпляр lzmacompressionsettings класса.
  3. Создайте экземпляр Archive класса и передайте его экземпляр ArchiveEntrySettings, созданные выше.
  4. Добавьте файлы данных для сжатия с помощью путей файлов с помощью метода archive.createEntry.
  5. Застегивайте файлы данных с помощью метода 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

  1. Откройте выходной поток файла с желаемым именем вашего выходного ZIP -файла.
  2. Создайте экземпляр ArchiveEntrySettings класса и пропустите его экземпляр bzip2compressionsettings класса.
  3. Создайте экземпляр Archive класса и передайте его экземпляр ArchiveEntrySettings, созданные выше.
  4. Добавьте файлы данных для сжатия с помощью путей файлов с помощью метода archive.createEntry.
  5. Застегивайте файлы данных, используя метод 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}
Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.