Як застібити та розпакувати файли на java
Огляд
Ця стаття навчить вас програмно стиснути поштові файли, використовуючи різноманітні методи, що використовують API Java та зразок коду. Ви дізнаєтесь, як наживати або стиснути один або кілька файлів, а також як одночасно zip -файлів. Ви також дізнаєтесь, як також декомпресувати або розпакувати файли.
Файли zip або стиснення в java та декомпресувати або розпакувати файли в java
Aspose.zip API дозволяє стиснути та декомпресувати файли, не турбуючись про основну структуру файлів. Ця стаття показує роботу з одиночним, а також декількома стисненнями файлів.
Стиснення файлів
Стиснення одного файлу
кроки: стиснення одного файлу в Java
- Створіть Потік виходу файлу з потрібним іменем вашого вихідного Zip -файлу.
- Створіть Потік введення файлу файлу даних, який потрібно стиснути.
- Створіть екземпляр архіву класу та передайте його екземпляр ArchiveEntrySettings класу.
- Додати файл даних, створений на кроці 2, використовуючи метод Archive.CreateEntry.
- Запроваджуйте файл даних за допомогою методу Archive.save і передайте його потік файлу, створеного на кроці 1.
1спробуйте (fileOutputStream Zipfile = новий FileOutputStream (DataDir + "CompresssingleFile_out.zip") {
2 // файл, який потрібно додати до архіву
3 спробуйте (fileInputStream ourse1 = новий FileInputStream (DataDir + "alice29.txt")) {
4 спробуйте (архів архів = новий архів (новий ArchiveEntrySettings ())) {
5 Archive.createEntry ("alice29.txt", джерело1);
6 Archive.save (Zipfile);
7 }
8 }
9} улов (IOException ex) {
10 System.out.println (ex);
11}
Стиснення декількох файлів
кроки: стиснення декількох файлів у Java
- Створіть потік файлу з потрібним іменем вашого вихідного Zip -файлу.
- Створіть потік файлу першого файлу даних, який потрібно стиснути.
- Створіть потік файлу другого файлу даних, який потрібно стиснути.
- Створіть екземпляр архіву класу.
- Додати файли даних, створені на кроці 2 та кроку 3, використовуючи метод Archive.CreateEntry.
- Створіть екземпляр ArchivesaveOptions класу.
- Запроваджуйте файли даних за допомогою методу Archive.save та передайте його потік файлу, створеного на кроці 1, та екземпляра ArchivesaveOptions, створена на вищезгаданому кроці.
1спробуйте (fileOutputStream Zipfile = новий FileOutputStream (DataDir + "CompresssingleFile_out.zip") {
2 спробуйте (fileInputStream ourse1 = новий FileInputStream (DataDir + "alice29.txt")) {
3 спробуйте (fileInputStream ourse2 = новий FileInputStream (DataDir + "asyoulik.txt")) {
4 спробуйте (архів архів = новий архів (новий ArchiveEntrySettings ())) {
5 Archive.createEntry ("alice29.txt", джерело1);
6 archive.createEntry ("asyoulik.txt", джерело2);
7 ArchivesaveOptions Options = нові архівизавопції ();
8 опції.setEncoding (StandardCharsets.us_ascii);
9 варіанти.setarchiveComment ("Є два вірші з Кентербері Корпуса");
10 Archive.save (Zipfile, варіанти);
11 }
12 }
13 }
14} улов (IOException ex) {
15 System.out.println (ex);
16}
Стиснення файлів за файлами інформація
кроки: стиснути файли за інформацією про файл у Java
- Відкрийте потік виходу файлу з потрібним іменем вашого вихідного Zip -файлу.
- Створіть файл Об’єкт вашого першого файлу даних, який потрібно стиснути.
- Створіть Файл Об’єкт вашого другого файлу даних, який підлягає стисненню.
- Створіть екземпляр архіву класу.
- Додати файли даних, створені на кроці 2 та кроку 3, використовуючи метод Archive.CreateEntry.
- Створіть екземпляр ArchivesaveOptions класу.
- Запроваджуйте файли даних за допомогою методу Archive.save та передайте його потік файлу, створеного на кроці 1, та екземпляра ArchivesaveOptions, створена на вищезгаданому кроці.
1спробуйте (fileOutputStream Zipfile = новий FileOutputStream (DataDir + "CompressFilesByFileInfo_out.zip")) {
2 Файл fi1 = новий файл (DataDir + "alice29.txt");
3 Файл fi2 = новий файл (DataDir + "fields.c");
4 спробуйте (архів архів = новий архів ()) {
5 Archive.CreateEntry ("alice29.txt", fi1);
6 Archive.createEntry ("fields.c", fi2);
7 ArchivesaveOptions Options = нові архівизавопції ();
8 опції.setEncoding (StandardCharsets.us_ascii);
9 Archive.save (Zipfile, варіанти);
10 }
11} улов (IOException ігнорується) {
12 System.out.println (ex);
13}
Зберігання файлів до архівів без стиснення
етапи: зберігання файлів до архівів без стиснення за допомогою Java
- Відкрийте потік виходу файлу з потрібним іменем вашого вихідного Zip -файлу.
- Створіть об’єкти файлу для зберігання файлів даних в архіві.
- Створіть екземпляр ArchiveEntrySettings класу та передайте його екземпляр storecompressionsettings класу.
- Створіть екземпляр архіву класу та передайте його екземпляр ArchiveEntrySettings клас, створений на вищезгаданому кроці.
- Додайте Файл Об’єкти, створені на кроці 2, використовуючи метод archive.createEntry.
- Створіть екземпляр ArchivesaveOptions та встановити кодування до StandardCharsets.us_ascii за допомогою методу archivesaveOptions.setEncoding.
- Запроваджуйте файли даних за допомогою методу Archive.save та передайте його потік файлів, створеного на кроці 1, та екземпляра ArchivesaveOptions, створена на вищезгаданому кроці.
1спробуйте (fileOutputStream Zipfile = новий FileOutputStream (DataDir + "StoreMultipleFilesWithOutCompression_out.zip") {
2 Файл fi1 = новий файл (DataDir + "alice29.txt");
3 Файл fi2 = новий файл (DataDir + "fields.c");
4 спробуйте (архів архів = новий архів (новий ArchiveEntrySettings (нові Storecompressionsettings ()))) {
5 Archive.CreateEntry ("alice29.txt", fi1);
6 Archive.createEntry ("fields.c", fi2);
7 ArchivesaveOptions Options = нові архівизавопції ();
8 опції.setEncoding (StandardCharsets.us_ascii);
9 Archive.save (Zipfile, варіанти);
10 }
11} улов (IOException ігнорується) {
12 System.out.println (ex);
13}
Використання паралелізму для стиснення файлів
етапи: використання паралелізму для стиснення файлів за допомогою Java
- Відкрийте потік виходу файлу з потрібним іменем вашого вихідного Zip -файлу.
- Відкрийте потоки введення файлів для стиснення перших та другого файлу даних.
- Створіть екземпляр архіву класу.
- Додати файли даних, створені на кроці 2, використовуючи метод Archive.CreateEntry.
- Створіть екземпляр паралелопції та встановіть parallelcompressionMode.Always за допомогою paralleloptions.setParalleLcompressInMemory.
- Створіть екземпляр ArchivesaveOptions та встановіть паралельні параметри з вищезазначеним, використовуючи метод archivesaveOptions.setParallelOloptions.
- Запроваджуйте файли даних, використовуючи метод Archive.save і передайте його потік файлу, створеного на кроці 1, та екземпляра ArchivesaveOptions, створена на вищезгаданому кроці.
1спробуйте (fileOutputStream Zipfile = новий FileOutputStream (DataDir + "ВикористанняParallelismTocompressFiles_out.zip")) {
2 спробуйте (fileInputStream ourse1 = новий FileInputStream (DataDir + "alice29.txt")) {
3 спробуйте (fileInputStream ourse2 = новий FileInputStream (DataDir + "asyoulik.txt")) {
4 спробуйте (архів архів = новий архів (новий ArchiveEntrySettings ())) {
5 Archive.createEntry ("alice29.txt", джерело1);
6 archive.createEntry ("asyoulik.txt", джерело2);
7 Паралелопції паралелопції = нові паралелопції ();
8 paralleloptions.setparallelcompressinmemory (parallelcompressionmode.always);
9 ArchivesaveOptions Options = нові архівизавопції ();
10 параметри.setParallelOloptions (паралелопції);
11 опції.setEncoding (StandardCharsets.us_ascii);
12 варіанти.setarchiveComment ("Є два вірші з Кентербері Корпуса");
13 Archive.save (Zipfile, варіанти);
14 }
15 }
16 }
17} улов (IOException ex) {
18 System.out.println (ex);
19}
Стиснення LZMA в Zip Archive
Алгоритм ланцюга Лемпель -Зів -Маркова (lzma) - це алгоритм, який використовується для виконання стиснення даних без втрат. LZMA використовує алгоритм стиснення словника, стислий потік - це потік шматочків. Стиснення LZMA всередині архіву ZIP дозволяє контейнерам zip містити стиснуті записи LZMA. Наступний приклад коду показує реалізацію стиснення LZMA за допомогою ASPOSE.ZIP API.
етапи: lzma стиснення в архіві zip з використанням Java
- Відкрийте потік виходу файлу з потрібним іменем вашого вихідного Zip -файлу.
- Створіть екземпляр ArchiveEntrySettings класу та передайте його екземпляр Lzmacompressionsettings класу.
- Створіть екземпляр архіву класу і передайте його екземпляр ArchiveEntrySettings, створеного вище.
- Додайте файли даних, які можна стиснути за допомогою файлів шляхом archive.createEntry методу.
- Запроваджуйте файли даних за допомогою методу Archive.save.
1спробуйте (fileOutputStream Zipfile = новий FileOutputStream (DataDir + "Lzmacompression_out.zip") {
2 Спробуйте (Archive Archive = новий архів (новий ArchiveEntrySettings (нові Lzmacompressionsettings ()))) {
3 Archive.createEntry ("sample.txt", datadir + "sample.txt");
4 Archive.save (Zipfile);
5 }
6} улов (IOException ігнорується) {
7 System.out.println (ex);
8}
Стиснення BZIP2 в Zip Archive
Налаштування стиснення BZIP2 дозволяють контейнер zip містити стиснуті записи BZIP2. Наступний приклад коду показує реалізацію стиснення BZIP2 за допомогою Aspose.zip API.
етапи: bzip2 стиснення в Zip Archive, використовуючи Java
- Відкрийте потік виходу файлу з потрібним іменем вашого вихідного Zip -файлу.
- Створіть екземпляр ArchiveEntrySettings класу та передайте його екземпляр Bzip2Compressionsettings класу.
- Створіть екземпляр архіву класу і передайте його екземпляр ArchiveEntrySettings, створеного вище.
- Додати файли даних, які можна стиснути за допомогою файлів шляхом archive.createEntry методу.
- Запроваджуйте файли даних за допомогою методу Archive.save.
1спробуйте (fileOutputStream Zipfile = новий FileOutputStream (DataDir + "Bzip2compression_out.zip") {
2 Спробуйте (Archive Archive = новий архів (новий ArchiveEntrySettings (нові bzip2compressionsettings ())) {
3 Archive.createEntry ("sample.txt", datadir + "sample.txt");
4 Archive.save (Zipfile);
5 }
6} улов (IOException ігнорується) {
7 System.out.println (ex);
8}
Декомпресія архівів
Покадати архів, що має один файл
1спробуйте (fileInputStream fs = новий FileInputStream (DataDir + "Compresssinglefile_out.zip")) {
2 спробуйте (архів архів = новий архів (FS)) {
3 int [] відсоток = новий int [] {0};
4 archive.getentries (). Get (0) .setextractionProgress (Нова подія <PlasseventArgs> () {
5 @Override
6 public void App (відправник об'єктів, прогресевентаргс Progresseventargs) {
7 int відсотків = (int) ((100 * progresseventargs.getproceceedbytes ())
8 / ((ArchiveEntry) відправник) .getUnCompressedSize ());
9 якщо (відсоток> відсоток [0])
10 {
11 System.out.println (відсоток + "% декомпресії");
12 відсоток [0] = відсоток;
13 }
14 }
15 });
16 archive.getentries (). get (0) .extract (DataDir + "alice_extracted_out.txt");
17 }
18} улов (IOException ex) {
19 System.out.println (ex);
20}
Покадати архів, що має кілька файлів
1спробуйте (fileInputStream fs = новий FileInputStream (DataDir + "CompressMultipleFiles_out.zip") {
2 StringBuilder SB = новий StringBuilder ("Записи:");
3 int [] відсоток = новий int [] {0};
4 Параметри ArchiveLoadoptions = нові архівелоадопції ();
5 Options.setEntryListed (Нова подія <entryeventargs> () {
6 @Override
7 public void App (відправник об'єктів, entryeventargs entryeventargs) {
8 sb.append (entryeventargs.getentry (). getName ()). Додатк (",");
9 }
10 });
11 Options.setEntryExtractionProgress (Нова подія <ProgressEventArgs> () {
12 @Override
13 public void App (відправник об'єктів, прогресевентаргс Progresseventargs) {
14 int відсотків = (int) ((100 * progresseventargs.getproceceedbytes ())
15 / ((ArchiveEntry) відправник) .getUnCompressedSize ());
16 якщо (відсоток> відсоток [0])
17 {
18 System.out.println (відсоток + "% стисненого");
19 відсоток [0] = відсоток;
20 }
21 }
22 });
23 спробуйте (архів архів = новий архів (FS, параметри)) {
24 System.out.println (SB.Substring (0, SB.Length () - 2);
25 спробуйте (fileOutputStream extreated = новий FileOutputStream (DataDir + "alice_extracted_out.txt") {
26 спробуйте (inputStream decompressed = archive.getentries (). get (0) .open ()) {
27 байт [] буфер = новий байт [8192];
28 int bytesread;
29 while (0 <(bytesread = decompressed.read (буфер, 0, buffer.length)) {
30 витягнутий.write (буфер, 0, bytesread);
31 }
32 // Прочитайте з декомпресованого потоку до вилучення файлу.
33 }
34 }
35 відсоток [0] = 0;
36 archive.getentries (). get (1) .extract (dataDir + "asyoulik_extracted_out.txt");
37 }
38} улов (IOException ex) {
39 System.out.println (ex);
40}
Екстракт зберігається архів без стиснення
1спробуйте (fileInputStream Zipfile = новий FileInputStream (DataDir + "storeMultipleFilesWithoutCompression_out.zip") {
2 спробуйте (архів архів = новий архів (Zipfile)) {
3 спробуйте (FileOutputStream extreated = новий FileOutputStream (DataDir + "alice_extracted_store_out.txt")) {
4 спробуйте (inputstream inder = archive.getentries (). get (0) .open ()) {
5 байт [] буфер = новий байт [8192];
6 int bytesread;
7 while (0 <(bytesread = indered.read (буфер, 0, buffer.length)) {
8 витягнутий.write (буфер, 0, bytesread);
9 }
10 // Прочитайте від збереженого потоку до вилучення файлу.
11 }
12 }
13 спробуйте (FileOutputStream extalted = новий FileOutputStream (DataDir + "asyoulik_extracted_store_out.txt")) {
14 спробуйте (inputstream inder = archive.getentries (). get (1) .open ()) {
15 байт [] буфер = новий байт [8192];
16 int bytesread;
17 while (0 <(bytesread = indered.read (буфер, 0, buffer.length)) {
18 витягнутий.write (буфер, 0, bytesread);
19 }
20 // Прочитайте від збереженого потоку до вилучення файлу.
21 }
22 }
23 }
24} улов (IOException ex) {
25 System.out.println (ex);
26}