Додаток Java Zip: Повний посібник
Вступ
Zip-файли – це архіви, які містять один або кілька файлів, стиснених для зменшення їх розміру. Вони часто використовуються для передачі даних через Інтернет, оскільки вони полегшують завантаження та зберігання. Java надає вбудований API, пакет java.util.zip, який дозволяє розробникам створювати, читати та модифікувати архіви Zip. У цій статті ми дослідимо можливості класу Zip, продемонструємо його використання через приклади коду та відповімо на поширені запитання щодо його застосування.
Створення архіву Zip
Щоб створити архів Zip, можна використовувати клас ZipOutputStream. Нижче наведено приклад коду, який створює файл ZIP, що містить два файли:
java
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class CreateZipFile {
public static void main(String[] args) {
String[] files = {"file1.txt", "file2.txt"};
String zipFilePath = "my-zip-file.zip";
try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFilePath))) {
for (String file : files) {
zos.putNextEntry(new ZipEntry(file));
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) > 0) {
zos.write(buffer, 0, length);
}
fis.close();
zos.closeEntry();
}
zos.close();
} catch (IOException e) {
System.out.println("Не вдалося створити файл ZIP: " + e.getMessage());
}
}
}
Читання архіву Zip
Для читання архіву Zip можна використовувати клас ZipInputStream. Нижче наведено приклад коду, який читає файл ZIP, створений у попередньому розділі:
java
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class ReadZipFile {
public static void main(String[] args) {
String zipFilePath = "my-zip-file.zip";
String destDirectory = "extracted-files";
try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFilePath))) {
ZipEntry entry;
while ((entry = zis.getNextEntry()) != null) {
File file = new File(destDirectory, entry.getName());
FileOutputStream fos = new FileOutputStream(file);
byte[] buffer = new byte[1024];
int length;
while ((length = zis.read(buffer)) > 0) {
fos.write(buffer, 0, length);
}
fos.close();
zis.closeEntry();
}
zis.close();
} catch (IOException e) {
System.out.println("Не вдалося прочитати файл ZIP: " + e.getMessage());
}
}
}
Додавання нових файлів до архіву Zip
Щоб додати нові файли до існуючого архіву Zip, можна використовувати метод putNextEntry(). У наступному прикладі коду демонструється, як додати файл “file3.txt” до архіву Zip, створеного в попередньому розділі:
java
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class AddFileToZip {
public static void main(String[] args) {
String zipFilePath = "my-zip-file.zip";
String fileToAdd = "file3.txt";
try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFilePath))) {
zos.putNextEntry(new ZipEntry(fileToAdd));
FileInputStream fis = new FileInputStream(fileToAdd);
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) > 0) {
zos.write(buffer, 0, length);
}
fis.close();
zos.closeEntry();
zos.close();
} catch (IOException e) {
System.out.println("Не вдалося додати файл до ZIP: " + e.getMessage());
}
}
}
Вилучення файлів з архіву Zip
Щоб вилучити файли з архіву Zip, можна використовувати метод getNextEntry(). У наступному прикладі коду демонструється, як вилучити всі файли з архіву Zip, створеного в попередньому розділі:
java
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class ExtractFilesFromZip {
public static void main(String[] args) {
String zipFilePath = "my-zip-file.zip";
String destDirectory = "extracted-files";
try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFilePath))) {
ZipEntry entry;
while ((entry = zis.getNextEntry()) != null) {
File file = new File(destDirectory, entry.getName());
FileOutputStream fos = new FileOutputStream(file);
byte[] buffer = new byte[1024];
int length;
while ((length = zis.read(buffer)) > 0) {
fos.write(buffer, 0, length);
}
fos.close();
zis.closeEntry();
}
zis.close();
} catch (IOException e) {
System.out.println("Не вдалося вилучити файли з ZIP: " + e.getMessage());
}
}
}
Висновок
Клас Zip у Java API дозволяє розробникам легко створювати, читати та модифікувати архіви Zip. Ці можливості є дуже корисними для розробки різноманітних програм, яким потрібно обробляти стиснуті дані. У цій статті ми розглянули повний набір функцій класу Zip, щоб допомогти розробникам ефективно використовувати його для різних потреб.
Поширені запитання (FAQ)
1. Які переваги використання архівів Zip?
– Вони стискають дані, зменшуючи їхній розмір.
– Вони дозволяють об’єднувати декілька файлів в один архів.
– Вони забезпечують зручний спосіб передачі даних через Інтернет.
2. Як я можу створити архів Zip, захищений паролем?
– Java API не надає вбудованої функції для створення архівів Zip, захищених паролем. Однак ви можете скористатися бібліотеками сторонніх виробників, такими як Apache Commons Compress, для цієї мети.
3. Чи можу я редагувати вміст файлів в архіві Zip без розпакування його?
– Ні, Java API не дозволяє редагувати файли в архіві Zip без їх розпакування.
4. Як я можу дізнатися загальний розмір стиснутих даних в архіві Zip?
– Використовуйте метод getCompressedSize() класу ZipEntry.
5. Чи можу я обмежувати розмір стиснутих даних в архіві Zip?
– Так, використовуючи метод setMethod() класу ZipEntry з константою DEFLATED і задаючи відповідний рівень стиснення.
6. Як я можу додавати файли до архіву Zip по одному?
– Використовуйте метод putNextEntry() класу ZipOutputStream і повторно викликайте його для кожного файлу, який потрібно додати.
7. Як я можу вилучати файли з архіву Zip, не вилучаючи весь архів?
– Використовуйте метод getNextEntry