Java ZIP API হলো এমন একটি API যা ফাইল বা ডিরেক্টরিকে কমপ্রেস (সংকুচিত) ও ডিকমপ্রেস (আন-সংকুচিত) করতে সাহায্য করে। এটি মূলত java.util.zip প্যাকেজে অবস্থিত এবং ZIP ফাইলের সাথে কাজ করার জন্য বিভিন্ন ক্লাস ও ইন্টারফেস প্রদান করে। এই API ব্যবহার করে আমরা সহজেই ফাইল বা ডিরেক্টরিকে সংকুচিত করে একটি .zip ফাইল তৈরি করতে পারি এবং আবার ডিকমপ্রেস করে পূর্বের অবস্থা ফিরে পেতে পারি।
কেন ZIP API প্রয়োজন?
- ডেটা কমপ্রেশন: ডেটা কমপ্রেস করে ফাইল বা ডিরেক্টরির আকার ছোট করা যায়, যা স্টোরেজ সাশ্রয়ী।
- ডেটা ট্রান্সমিশন: কমপ্রেসড ফাইল দ্রুত ইন্টারনেটে ট্রান্সফার করা যায়, কারণ এতে ব্যান্ডউইথ কম লাগে।
- ফাইল সংরক্ষণ: অনেক ফাইল বা ডিরেক্টরিকে একসাথে একটি ZIP আর্কাইভে সংরক্ষণ করা যায়, যা ম্যানেজমেন্ট সহজ করে।
Java ZIP API এর প্রধান ক্লাসগুলো
- ZipOutputStream: ফাইল বা ডিরেক্টরি কমপ্রেস করে একটি
.zipফাইল তৈরি করতে ব্যবহৃত হয়। - ZipInputStream:
.zipফাইল থেকে ফাইল বা ডিরেক্টরি ডিকমপ্রেস করতে ব্যবহৃত হয়। - ZipEntry:
.zipফাইলের প্রতিটি এন্ট্রি বা উপাদান নির্দেশ করে।
উদাহরণ ১: একটি ফাইল কমপ্রেস করে ZIP ফাইল তৈরি করা
নিচের উদাহরণে একটি ফাইল কমপ্রেস করে .zip ফাইলে সংরক্ষণ করা হয়েছে।
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipFileExample {
public static void main(String[] args) {
String sourceFile = "example.txt"; // সংরক্ষণযোগ্য ফাইলের নাম
String zipFileName = "compressed.zip";
try (FileOutputStream fos = new FileOutputStream(zipFileName);
ZipOutputStream zos = new ZipOutputStream(fos);
FileInputStream fis = new FileInputStream(sourceFile)) {
ZipEntry zipEntry = new ZipEntry(sourceFile);
zos.putNextEntry(zipEntry);
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) > 0) {
zos.write(buffer, 0, length);
}
zos.closeEntry();
System.out.println("File compressed successfully!");
} catch (IOException e) {
System.out.println("Error: " + e.getMessage());
}
}
}
বিবরণ:
ZipOutputStreamদিয়ে নতুন.zipফাইল তৈরি করা হয়েছে।putNextEntry()মেথড ব্যবহার করেZipEntryযোগ করা হয়েছে এবংFileInputStreamএর সাহায্যে ফাইল পড়েzos.write()মেথডের মাধ্যমে.zipফাইলে লেখা হয়েছে।closeEntry()মেথড দিয়ে এন্ট্রি বন্ধ করা হয়েছে।
উদাহরণ ২: একটি ZIP ফাইল আন-কমপ্রেস (ডিকমপ্রেস) করা
নিচের উদাহরণে একটি .zip ফাইল ডিকমপ্রেস করে এর ভিতরের ফাইলগুলো আলাদা করা হয়েছে।
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.io.File;
public class UnzipFileExample {
public static void main(String[] args) {
String zipFilePath = "compressed.zip";
String destDir = "output";
File dir = new File(destDir);
if (!dir.exists()) dir.mkdirs();
try (FileInputStream fis = new FileInputStream(zipFilePath);
ZipInputStream zis = new ZipInputStream(fis)) {
ZipEntry zipEntry = zis.getNextEntry();
while (zipEntry != null) {
File newFile = new File(destDir, zipEntry.getName());
try (FileOutputStream fos = new FileOutputStream(newFile)) {
byte[] buffer = new byte[1024];
int length;
while ((length = zis.read(buffer)) > 0) {
fos.write(buffer, 0, length);
}
}
zis.closeEntry();
zipEntry = zis.getNextEntry();
}
System.out.println("File decompressed successfully!");
} catch (IOException e) {
System.out.println("Error: " + e.getMessage());
}
}
}
বিবরণ:
ZipInputStreamদিয়ে.zipফাইল ওপেন করা হয়েছে।getNextEntry()মেথডের মাধ্যমে প্রতিটি এন্ট্রি পড়া হয়েছে এবংFileOutputStreamদিয়ে ফাইল আউটপুট ডিরেক্টরিতে লেখা হয়েছে।closeEntry()মেথড দিয়ে এন্ট্রি বন্ধ করা হয়েছে।
উদাহরণ ৩: একটি ডিরেক্টরি কমপ্রেস করা
নিচের উদাহরণে একটি সম্পূর্ণ ডিরেক্টরি কমপ্রেস করে .zip ফাইলে সংরক্ষণ করা হয়েছে।
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipDirectoryExample {
public static void main(String[] args) {
String sourceDir = "myfolder"; // কমপ্রেসযোগ্য ডিরেক্টরি
String zipFile = "myfolder.zip";
try (FileOutputStream fos = new FileOutputStream(zipFile);
ZipOutputStream zos = new ZipOutputStream(fos)) {
File dir = new File(sourceDir);
zipDirectory(dir, dir.getName(), zos);
System.out.println("Directory compressed successfully!");
} catch (IOException e) {
System.out.println("Error: " + e.getMessage());
}
}
private static void zipDirectory(File dir, String baseName, ZipOutputStream zos) throws IOException {
File[] files = dir.listFiles();
if (files != null) {
for (File file : files) {
String entryName = baseName + "/" + file.getName();
if (file.isDirectory()) {
zipDirectory(file, entryName, zos); // রেকারসিভলি সাবডিরেক্টরি কমপ্রেস করা
} else {
try (FileInputStream fis = new FileInputStream(file)) {
ZipEntry zipEntry = new ZipEntry(entryName);
zos.putNextEntry(zipEntry);
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) > 0) {
zos.write(buffer, 0, length);
}
zos.closeEntry();
}
}
}
}
}
}
বিবরণ:
zipDirectory()মেথড রেকারসিভলি কাজ করে এবং প্রতিটি ফাইল ও ডিরেক্টরি কমপ্রেস করে.zipফাইলে সংরক্ষণ করে।putNextEntry()এবংwrite()মেথডের মাধ্যমে ফাইল.zipফাইলে লেখা হয়েছে এবংcloseEntry()মেথড দিয়ে এন্ট্রি বন্ধ করা হয়েছে।
Java ZIP API এর সুবিধা এবং সীমাবদ্ধতা
সুবিধা
- স্টোরেজ সাশ্রয়: ফাইল বা ডিরেক্টরিকে কমপ্রেস করে সংরক্ষণে স্থান সাশ্রয় হয়।
- ডেটা ট্রান্সফার সহজ:
.zipফাইলের আকার ছোট হওয়ায় ইন্টারনেটের মাধ্যমে সহজে শেয়ার করা যায়। - আর্কাইভিং সুবিধা: অনেক ফাইল একত্রে একটি
.zipফাইলে সংরক্ষণ করা যায়।
সীমাবদ্ধতা
- পারফরম্যান্স ইস্যু: বড় ফাইল বা ডিরেক্টরি কমপ্রেস করলে কম্প্রেশন প্রক্রিয়াটি ধীর হতে পারে।
- সাধারণ স্ট্রিমিং সীমাবদ্ধতা: বড় আকারের ফাইল কম্প্রেশন ও ডিকম্প্রেশনে অনেক মেমোরি এবং প্রসেসিং ক্ষমতা প্রয়োজন।
- ZIP ফরম্যাট সীমাবদ্ধতা: শুধুমাত্র
.zipফরম্যাট সমর্থন করে; অন্যান্য ফরম্যাট (যেমন RAR, 7z) সমর্থন করে না।
সারসংক্ষেপ
- Java ZIP API
java.util.zipপ্যাকেজে অবস্থিত এবং ফাইল বা ডিরেক্টরিকে কমপ্রেস ও ডিকমপ্রেস করার জন্য ব্যবহৃত হয়। - এর প্রধান ক্লাসগুলো হলো
ZipOutputStream,ZipInputStream, এবংZipEntry। - ZIP API ব্যবহার করে
.zipফাইল তৈরি, ডিকমপ্রেস, এবং ডিরেক্টরি কমপ্রেস করা যায়।
Java ZIP API ব্যবহার করে ডেটা কমপ্রেশন এবং ট্রান্সফার করা সহজ হয়, যা স্টোরেজ এবং নেটওয়ার্ক ব্যান্ডউইথ সাশ্রয় করতে সহায়
Read more