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 এর মধ্যে পার্থক্য
| বিষয় | ZipOutputStream | ZipInputStream |
|---|---|---|
| কাজ | ফাইল বা ডেটাকে 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এর সাথে multipleZipEntryব্যবহার করা হয়।
এই কৌশলগুলি Java I/O এর মাধ্যমে ডেটা সংরক্ষণ এবং ট্রান্সফার করার জন্য খুবই কার্যকরী, বিশেষ করে যখন ফাইলের আকার বড় বা একাধিক ফাইল কমপ্রেস করতে হয়।
Read more