العمل مع أرشيفات ZIP في Java: java.util.zip و Zip4j

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع أرشيفات ZIP في Java: java.util.zip و Zip4j



ضغط البيانات وأرشفتها هي إحدى المهام الأساسية عند تطوير التطبيقات بلغة Java. تُستخدم أرشيفات ZIP على نطاق واسع لتعبئة الملفات، ونقل البيانات عبر الشبكة، وتوفير مساحة التخزين. في هذه المقالة، سنستعرض بالتفصيل طريقتين رئيسيتين للعمل مع أرشيفات ZIP في Java: الحزمة المضمنة java.util.zip والمكتبة الخارجية القوية Zip4j.



الحزمة القياسية java.util.zip



منذ JDK 1.1، تتوفر في Java حزمة java.util.zip التي توفر فئات أساسية للعمل مع تنسيق ZIP. الفئات الرئيسية:

  • ZipOutputStream — لإنشاء أرشيفات ZIP
  • ZipInputStream — لقراءة أرشيفات ZIP
  • ZipEntry — تمثل إدخالاً فردياً (ملفاً أو مجلداً) داخل الأرشيف
  • ZipFile — للوصول العشوائي إلى محتويات الأرشيف


إنشاء أرشيف ZIP باستخدام java.util.zip



import java.io.*;import java.util.zip.*;

public class ZipCreator { public static void main(String[] args) throws IOException { String sourceFile = "document.txt"; String zipName = "archive.zip";

try (FileOutputStream fos = new FileOutputStream(zipName); ZipOutputStream zos = new ZipOutputStream(fos)) {

File fileToZip = new File(sourceFile); FileInputStream fis = new FileInputStream(fileToZip);

ZipEntry zipEntry = new ZipEntry(fileToZip.getName()); zos.putNextEntry(zipEntry);

byte[] buffer = new byte[1024]; int length; while ((length = fis.read(buffer)) >= 0) { zos.write(buffer, 0, length); } zos.closeEntry(); fis.close(); } System.out.println("تم إنشاء الأرشيف: " + zipName); }}


فك ضغط أرشيف ZIP



import java.io.*;import java.util.zip.*;

public class ZipExtractor { public static void main(String[] args) throws IOException { String zipFile = "archive.zip"; String outputDir = "extracted";

new File(outputDir).mkdirs();

try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile))) { ZipEntry entry; while ((entry = zis.getNextEntry()) != null) { File newFile = new File(outputDir, entry.getName()); new File(newFile.getParent()).mkdirs();

FileOutputStream fos = new FileOutputStream(newFile); byte[] buffer = new byte[1024]; int len; while ((len = zis.read(buffer)) > 0) { fos.write(buffer, 0, len); } fos.close(); zis.closeEntry(); } } System.out.println("تم إكمال فك الضغط في المجلد: " + outputDir); }}


قيود java.util.zip:

  • لا يدعم التشفير (الحماية بكلمة مرور)
  • دعم محدود لـ Unicode في أسماء الملفات (قبل Java 7)
  • عدم دعم ZIP64 للأرشيفات > 4 جيجابايت (قبل Java 8)
  • صعوبة التعامل مع المجلدات المتداخلة


مكتبة Zip4j — إمكانيات متقدمة



Zip4j هي مكتبة خارجية شهيرة مفتوحة المصدر تعالج معظم قيود الحزمة القياسية. لإضافتها، أضف التبعية في Maven:



<dependency>    <groupId>net.lingala.zip4j</groupId>    <artifactId>zip4j</artifactId>    <version>2.11.5</version></dependency>


إنشاء أرشيف ZIP مشفر باستخدام Zip4j



import net.lingala.zip4j.ZipFile;import net.lingala.zip4j.model.ZipParam                    

توصيات