العمل مع أرشيفات ZIP في Java: دليل كامل لـ java.util.zip

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

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

ابدأ الدورة

العمل مع أرشيفات ZIP في Java: دليل كامل



في التطوير الحديث باستخدام Java، غالبًا ما تنشأ الحاجة لضغط وفك ضغط الملفات. ZIP هو أحد أشهر تنسيقات الضغط، ويدعمه المكتبة القياسية لـ Java. توفر الحزمة المدمجة java.util.zip جميع الأدوات اللازمة للعمل مع أرشيفات ZIP دون الحاجة إلى تثبيت تبعيات خارجية.



الفئات الرئيسية لحزمة java.util.zip



تتضمن حزمة java.util.zip عدة فئات رئيسية للعمل مع الأرشيفات:



  • ZipOutputStream — لإنشاء أرشيفات ZIP وكتابة الملفات فيها
  • ZipInputStream — لقراءة محتويات أرشيفات ZIP
  • ZipEntry — يمثل إدخالاً فرديًا (ملفًا أو مجلدًا) داخل الأرشيف
  • ZipFile — للوصول المباشر إلى إدخالات الأرشيف حسب الاسم
  • Deflater/Inflater — فئات منخفضة المستوى لضغط/فك ضغط البيانات


إنشاء أرشيف ZIP



لإنشاء أرشيف، يُستخدم ZipOutputStream. يتم تمثيل كل ملف يُضاف كـ ZipEntry. لنلقِ نظرة على مثال يقوم بضغط عدة ملفات في أرشيف واحد:



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

public class CreateZipExample { public static void main(String[] args) { // مصفوفة الملفات للأرشفة String[] sourceFiles = {"file1.txt", "file2.txt", "image.png"}; String zipFileName = "archive.zip";

try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFileName))) { byte[] buffer = new byte[1024];

for (String filePath : sourceFiles) { File file = new File(filePath); // إنشاء إدخال في الأرشيف ZipEntry zipEntry = new ZipEntry(file.getName()); zos.putNextEntry(zipEntry);

// قراءة الملف وكتابته في الأرشيف try (FileInputStream fis = new FileInputStream(file)) { int length; while ((length = fis.read(buffer)) > 0) { zos.write(buffer, 0, length); } } zos.closeEntry(); } System.out.println("تم إنشاء الأرشيف: " + zipFileName); } catch (IOException e) { e.printStackTrace(); } }}


فك ضغط أرشيف ZIP



لقراءة الأرشيف، يُستخدم ZipInputStream. تقوم طريقة getNextEntry() بإرجاع جميع إدخالات الأرشيف بالتسلسل:



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

public class ExtractZipExample { public static void main(String[] args) { String zipFileName = "archive.zip"; String outputDir = "extracted_files";

new File(outputDir).mkdir();

try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFileName))) { ZipEntry entry; byte[] buffer = new byte[1024];

while ((entry = zis.getNextEntry()) != null) { String fileName = entry.getName(); File newFile = new File(outputDir + File.separator + fileName);

// إنشاء المجلدات عند الحاجة new File(newFile.getParent()).mkdirs();

try (FileOutputStream fos = new FileOutputStream(newFile)) { int length; while ((length = zis.read(buffer)) > 0) { fos.write(buffer, 0, length); } } zis.closeEntry(); System.out.println("تم فك الضغط: " + fileName); } } catch (IOException e) { e.printStackTrace(); } }}


العمل مع ZipFile للوصول العشوائي

\

توصيات