Java में ZIP/आर्काइव के साथ काम: java.util.zip और Zip4j

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Java में ZIP/आर्काइव के साथ काम: java.util.zip और Zip4j

Java एप्लिकेशन डेवलप करते समय डेटा को कंप्रेस और आर्काइव करना एक महत्वपूर्ण कार्य है। ZIP आर्काइव का उपयोग फ़ाइलों को पैक करने, नेटवर्क पर डेटा ट्रांसफर करने और डिस्क स्पेस बचाने के लिए व्यापक रूप से किया जाता है। इस लेख में हम Java में ZIP आर्काइव के साथ काम करने के दो मुख्य तरीकों पर विस्तार से चर्चा करेंगे: बिल्ट-इन पैकेज java.util.zip और शक्तिशाली थर्ड-पार्टी लाइब्रेरी Zip4j।

स्टैंडर्ड पैकेज java.util.zip

JDK 1.1 से ही Java में java.util.zip पैकेज उपलब्ध है, जो ZIP फॉर्मेट के साथ काम करने के लिए बेसिक क्लासेस प्रदान करता है। मुख्य क्लासेस:

  • ZipOutputStream — ZIP आर्काइव बनाने के लिए
  • ZipInputStream — ZIP आर्काइव पढ़ने के लिए
  • ZipEntry — आर्काइव के अंदर एक एंट्री (फ़ाइल या फ़ोल्डर) को दर्शाता है
  • ZipFile — आर्काइव की सामग्री तक रैंडम एक्सेस के लिए

java.util.zip के साथ 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 से पहले)
  • 4 GB से बड़े आर्काइव के लिए ZIP64 का समर्थन नहीं (Java 8 से पहले)
  • नेस्टेड फ़ोल्डरों के साथ काम करना मुश्किल

Zip4j लाइब्रेरी — उन्नत सुविधाएँ

Zip4j एक लोकप्रिय ओपन-सोर्स थर्ड-पार्टी लाइब्रेरी है जो स्टैंडर्ड पैकेज की अधिकांश सीमाओं को हल करती है। इसे जोड़ने के लिए Maven में डिपेंडेंसी जोड़ें:

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

Zip4j के साथ एन्क्रिप्टेड ZIP आर्काइव बनाना

import net.lingala.zip4j.ZipFile;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.enums.EncryptionMethod;

import java.io.File;
import java.util.Col                    

अनुशंसाएँ