ZipInputStream এবং ZipOutputStream ক্লাসগুলি Java I/O প্যাকেজের অংশ, যা ফাইল বা ডেটাকে ZIP ফরম্যাট-এ কম্প্রেস এবং ডি-কম্প্রেস করার জন্য ব্যবহৃত হয়। ZipOutputStream ফাইল কম্প্রেস করতে এবং ZipInputStream ফাইল ডি-কম্প্রেস করতে ব্যবহৃত হয়।
ZIP ফাইল একটি জনপ্রিয় আর্কাইভ ফরম্যাট যা একাধিক ফাইলকে কম্প্রেস করে একটি ফাইলের মধ্যে সংরক্ষণ করে এবং এটি ডেটার আকার কমাতে সাহায্য করে।
ZipOutputStream: File Compression
ZipOutputStream ব্যবহার করে আমরা একটি বা একাধিক ফাইলকে ZIP ফাইল ফরম্যাটে কম্প্রেস করতে পারি। এটি OutputStream এর একটি সাবক্লাস এবং ZIP ফরম্যাটে ডেটা লেখার জন্য ব্যবহৃত হয়।
ZipOutputStream ব্যবহার করে ফাইল কম্প্রেস করার উদাহরণ:
import java.io.*;
import java.util.zip.*;
public class FileCompressionExample {
public static void main(String[] args) {
try {
// কম্প্রেস করা ফাইলের নাম এবং আউটপুট ফাইল সেট করা
String[] filesToCompress = {"file1.txt", "file2.txt"};
FileOutputStream fos = new FileOutputStream("compressed.zip");
ZipOutputStream zos = new ZipOutputStream(fos);
// প্রতিটি ফাইলের জন্য ZIP এ এন্ট্রি তৈরি এবং লেখার প্রক্রিয়া
for (String file : filesToCompress) {
FileInputStream fis = new FileInputStream(file);
ZipEntry zipEntry = new ZipEntry(file);
zos.putNextEntry(zipEntry);
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) > 0) {
zos.write(buffer, 0, length); // ফাইলের ডেটা ZIP ফাইলে লেখা
}
zos.closeEntry();
fis.close();
}
zos.close();
System.out.println("Files compressed successfully into compressed.zip");
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- ZipOutputStream ব্যবহার করে ZIP ফাইল তৈরি করা হয়েছে।
- ZipEntry ব্যবহার করে প্রতিটি ফাইলের জন্য একটি এন্ট্রি তৈরি করা হয়েছে এবং সেই ফাইলের ডেটা ZIP ফাইলে লেখা হয়েছে।
- একটি byte buffer ব্যবহার করে ফাইলের ডেটা ZIP ফাইল এ লেখা হচ্ছে।
- closeEntry() মেথড ব্যবহার করে প্রতিটি ফাইলের এন্ট্রি বন্ধ করা হয়েছে।
আউটপুট:
Files compressed successfully into compressed.zip
এখন compressed.zip ফাইলে file1.txt এবং file2.txt এর ডেটা কম্প্রেস করা হবে।
ZipInputStream: File Decompression
ZipInputStream ব্যবহার করে আমরা একটি ZIP ফাইল থেকে ডেটা ডি-কম্প্রেস করতে পারি। এটি InputStream এর একটি সাবক্লাস এবং ZIP ফরম্যাট থেকে ডেটা পড়ার জন্য ব্যবহৃত হয়।
ZipInputStream ব্যবহার করে ফাইল ডি-কম্প্রেস করার উদাহরণ:
import java.io.*;
import java.util.zip.*;
public class FileDecompressionExample {
public static void main(String[] args) {
try {
// ZIP ফাইল থেকে ডেটা পড়া
FileInputStream fis = new FileInputStream("compressed.zip");
ZipInputStream zis = new ZipInputStream(fis);
ZipEntry entry;
while ((entry = zis.getNextEntry()) != null) {
System.out.println("Extracting file: " + entry.getName());
// আউটপুট ফাইল তৈরি
FileOutputStream fos = new FileOutputStream(entry.getName());
byte[] buffer = new byte[1024];
int length;
while ((length = zis.read(buffer)) > 0) {
fos.write(buffer, 0, length); // ডেটা আউটপুট ফাইলে লেখা
}
zis.closeEntry();
fos.close();
}
zis.close();
System.out.println("Files decompressed successfully.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- ZipInputStream ব্যবহার করে compressed.zip ফাইলটি খোলা হয়েছে।
- getNextEntry() মেথড ব্যবহার করে ZIP ফাইলে উপস্থিত ফাইলগুলির এন্ট্রি পড়া হচ্ছে।
- প্রতিটি ZipEntry থেকে ফাইল ডেটা বের করা হচ্ছে এবং মূল ফাইলে ডি-কম্প্রেস করা হচ্ছে।
- closeEntry() মেথড ব্যবহার করে একটি এন্ট্রি শেষ হওয়ার পরে তার সংশ্লিষ্ট স্ট্রীম বন্ধ করা হচ্ছে।
আউটপুট:
Extracting file: file1.txt
Extracting file: file2.txt
Files decompressed successfully.
ফাইল file1.txt এবং file2.txt পুনরায় তাদের মূল অবস্থায় আউটপুট ফোল্ডারে ডি-কম্প্রেস করা হবে।
ZipOutputStream এবং ZipInputStream এর সুবিধা:
- Space Optimization (Compression):
- ZIP কম্প্রেশন ফাইলের আকার কমিয়ে দেয়, যা storage এবং transfer ব্যবস্থাপনায় সহায়ক।
- Multiple Files Handling:
- একাধিক ফাইলকে একটি একক ZIP ফাইলে সংরক্ষণ করা যায়, যা অনেক বেশি কার্যকর এবং সহজে হ্যান্ডেল করা যায়।
- Data Integrity:
- ZIP ফাইল সংরক্ষিত অবস্থায় নিরাপদ থাকে এবং password protection এবং encryption সমর্থন করে (যদিও Java API তে সরাসরি এই সুবিধা নেই, তবে তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করে এটি করা সম্ভব)।
- Easy Extraction:
- ZipInputStream ব্যবহার করে একাধিক ফাইল সহজেই ডি-কম্প্রেস করা যায়।
ZipOutputStream এবং ZipInputStream এর সীমাবদ্ধতা:
- Limited Compression Types:
- ZipOutputStream কেবল ZIP ফরম্যাটে ডেটা কম্প্রেস করতে সক্ষম। অন্যান্য ফরম্যাট (যেমন tar.gz) এর জন্য অন্যান্য লাইব্রেরি ব্যবহার করা প্রয়োজন।
- Password Protection:
- Java I/O API তে ZIP ফাইল এর জন্য সরাসরি password protection বা encryption সাপোর্ট নেই, তবে আপনি third-party libraries ব্যবহার করে এটি বাস্তবায়ন করতে পারেন।
- Large File Handling:
- খুব বড় ফাইলের ক্ষেত্রে buffering এবং compression অপারেশনগুলি কিছু পরিমাণ memory ব্যবহার করতে পারে, তাই আপনাকে যথাযথভাবে buffer size এবং compression techniques নির্বাচন করতে হবে।
- ZipInputStream এবং ZipOutputStream Java I/O প্যাকেজের ক্লাস যা ZIP ফাইল কম্প্রেস এবং ডি-কম্প্রেস করার জন্য ব্যবহৃত হয়।
- ZipOutputStream ব্যবহার করে আপনি একাধিক ফাইলকে কম্প্রেস করতে পারেন এবং ZipInputStream ব্যবহার করে সেই ফাইলগুলো ডি-কম্প্রেস করতে পারেন।
- এটি file storage এবং data transfer এর জন্য অনেক উপকারী, কারণ এটি ফাইলের আকার কমাতে এবং একাধিক ফাইলকে একত্রিত করতে সহায়ক।
Read more