ZipInputStream এবং ZipOutputStream ব্যবহার করে ফাইল কমপ্রেস করা

File Compression এবং Decompression (ZipInputStream এবং ZipOutputStream) - জাভা টাপল (Java Tuples) - Java Technologies

332

Java তে ZipInputStream এবং ZipOutputStream ক্লাসগুলি ব্যবহার করে ফাইল কমপ্রেস করা বা ডিকমপ্রেস করা যেতে পারে। ZipInputStream এবং ZipOutputStream ক্লাসগুলি java.util.zip প্যাকেজে অন্তর্ভুক্ত এবং তারা ZIP ফাইল ফরম্যাট ব্যবহার করে ডেটা কমপ্রেস এবং এক্সট্র্যাক্ট করার জন্য ব্যবহৃত হয়।

  • ZipOutputStream: একটি ফাইলকে ZIP ফরম্যাট-এ কমপ্রেস করতে ব্যবহৃত হয়।
  • ZipInputStream: একটি ZIP ফাইল থেকে ডেটা পড়ে (ডিকমপ্রেস)।

এই ক্লাসগুলি ফাইল বা ডিরেক্টরি কমপ্রেস এবং এক্সট্র্যাক্ট করতে সাহায্য করে।


ZipOutputStream - ফাইল কমপ্রেস করা

ZipOutputStream ব্যবহার করে আপনি একটি বা একাধিক ফাইলকে ZIP ফাইল-এ কমপ্রেস করতে পারেন। এই ক্লাসটি OutputStream এর একটি সাবক্লাস, যা ডেটা ZIP ফরম্যাটে লেখার জন্য ব্যবহৃত হয়।

ZipOutputStream উদাহরণ:

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

public class ZipFileExample {
    public static void main(String[] args) {
        String sourceFile = "example.txt";
        String zipFileName = "example.zip";

        try (FileInputStream fis = new FileInputStream(sourceFile);
             FileOutputStream fos = new FileOutputStream(zipFileName);
             ZipOutputStream zos = new ZipOutputStream(fos)) {

            // Add a new entry (file) to the ZIP
            ZipEntry zipEntry = new ZipEntry("example.txt");  // The name of the file inside the ZIP
            zos.putNextEntry(zipEntry);

            byte[] buffer = new byte[1024];
            int length;
            while ((length = fis.read(buffer)) > 0) {
                zos.write(buffer, 0, length);  // Write data to ZIP file
            }

            zos.closeEntry();  // Close the current ZIP entry
            System.out.println("File successfully compressed to " + zipFileName);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  • ZipOutputStream ব্যবহার করে ফাইলের ডেটা ZIP ফরম্যাটে কমপ্রেস করা হয়েছে।
  • ZipEntry ক্লাসটি ব্যবহার করা হয়েছে, যা ZIP ফাইলের ভিতরে প্রতিটি ফাইলের জন্য একটি এন্ট্রি তৈরি করে।
  • putNextEntry() মেথড দ্বারা একটি নতুন ফাইল এন্ট্রি তৈরি করা হয় এবং closeEntry() মেথড দ্বারা শেষ করা হয়।
  • fis.read(buffer) ব্যবহার করে ফাইলের ডেটা পড়ে এবং zos.write() দ্বারা ZIP ফাইলের মধ্যে লেখা হয়।

ZipInputStream - ZIP ফাইল ডিকমপ্রেস করা

ZipInputStream ব্যবহার করে আপনি একটি ZIP ফাইল থেকে ডেটা ডিকমপ্রেস করতে পারেন। এই ক্লাসটি InputStream এর একটি সাবক্লাস, যা ZIP ফাইল থেকে ডেটা পড়ার জন্য ব্যবহৃত হয়।

ZipInputStream উদাহরণ:

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

public class UnzipFileExample {
    public static void main(String[] args) {
        String zipFileName = "example.zip";
        String outputDir = "output/";

        try (FileInputStream fis = new FileInputStream(zipFileName);
             ZipInputStream zis = new ZipInputStream(fis)) {

            // Create output directory if it does not exist
            File dir = new File(outputDir);
            if (!dir.exists()) {
                dir.mkdirs();
            }

            ZipEntry zipEntry;
            while ((zipEntry = zis.getNextEntry()) != null) {
                // Create output file for each entry in the ZIP
                File newFile = new File(outputDir + zipEntry.getName());
                try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFile))) {
                    byte[] buffer = new byte[1024];
                    int length;
                    while ((length = zis.read(buffer)) > 0) {
                        bos.write(buffer, 0, length);  // Write the decompressed data to the output file
                    }
                }
                zis.closeEntry();  // Close the current ZIP entry
            }

            System.out.println("Files successfully extracted to " + outputDir);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  • ZipInputStream ব্যবহার করে ZIP ফাইলের সমস্ত এন্ট্রি ডিকমপ্রেস করা হয়েছে।
  • getNextEntry() মেথডের মাধ্যমে ZIP ফাইলের প্রতিটি এন্ট্রি পড়া হয়।
  • BufferedOutputStream ব্যবহার করে ডিকমপ্রেসড ডেটা নির্দিষ্ট ফাইলে লেখা হয়।
  • zis.closeEntry() দিয়ে প্রতিটি এন্ট্রি সম্পন্ন করার পর সেটি বন্ধ করা হয়।

ZipInputStream এবং ZipOutputStream এর মধ্যে পার্থক্য

বিষয়ZipOutputStreamZipInputStream
কাজফাইল বা ডেটাকে ZIP ফরম্যাটে কমপ্রেস করে।ZIP ফাইল থেকে ডেটা ডিকমপ্রেস করে।
স্ট্রিম টাইপOutputStream (write data)InputStream (read data)
ব্যবহারফাইল কমপ্রেস করার জন্য।ফাইল ডিকমপ্রেস করার জন্য।
এন্ট্রি ব্যবস্থাপনাZipEntry দ্বারা কমপ্রেসড ফাইল এন্ট্রি তৈরি করা হয়।ZipEntry দ্বারা ZIP ফাইল থেকে ডেটা পড়া হয়।

Multiple Files Compression with ZipOutputStream

ZipOutputStream ব্যবহার করে আপনি একাধিক ফাইল একসাথে ZIP ফাইলে কমপ্রেস করতে পারেন। এটি একাধিক ZipEntry তৈরি করে এবং প্রত্যেকটি ফাইলের জন্য ডেটা লিখতে দেয়।

Multiple Files Compression উদাহরণ:

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

public class MultiFileZipExample {
    public static void main(String[] args) {
        String[] files = {"file1.txt", "file2.txt", "file3.txt"};
        String zipFileName = "files.zip";

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

            for (String fileName : files) {
                File file = new File(fileName);
                try (FileInputStream fis = new FileInputStream(file)) {
                    // Create a new ZIP entry for each file
                    ZipEntry zipEntry = new ZipEntry(file.getName());
                    zos.putNextEntry(zipEntry);

                    // Read the file and write its content to the ZIP
                    byte[] buffer = new byte[1024];
                    int length;
                    while ((length = fis.read(buffer)) > 0) {
                        zos.write(buffer, 0, length);
                    }
                    zos.closeEntry(); // Close the entry
                }
            }

            System.out.println("Multiple files compressed into " + zipFileName);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  • একাধিক ফাইলকে ZIP ফাইল-এ কমপ্রেস করা হচ্ছে। প্রতিটি ফাইলের জন্য আলাদা ZipEntry তৈরি করা হয়েছে।
  • প্রতিটি ফাইল থেকে ডেটা পড়ে এবং ZipOutputStream এর মাধ্যমে ZIP ফাইলে লেখা হচ্ছে।

  • ZipInputStream এবং ZipOutputStream ফাইল কমপ্রেস এবং ডিকমপ্রেস করার জন্য Java-তে কার্যকরী টুল।
  • ZipOutputStream ব্যবহার করে ফাইলকে ZIP ফরম্যাটে কমপ্রেস করা যায়, এবং ZipInputStream ব্যবহার করে সেই কমপ্রেসড ফাইল থেকে ডেটা পড়া যায়।
  • একাধিক ফাইলকে একটি ZIP ফাইল-এ কমপ্রেস করতে ZipOutputStream এর সাথে multiple ZipEntry ব্যবহার করা হয়।

এই কৌশলগুলি Java I/O এর মাধ্যমে ডেটা সংরক্ষণ এবং ট্রান্সফার করার জন্য খুবই কার্যকরী, বিশেষ করে যখন ফাইলের আকার বড় বা একাধিক ফাইল কমপ্রেস করতে হয়।

Content added By
Promotion

Are you sure to start over?

Loading...