Multiple ফাইল এবং ডিরেক্টরি Compress করার উদাহরণ: Java তে java.util.zip প্যাকেজ ব্যবহার করে একাধিক ফাইল এবং ডিরেক্টরি জিপ (compress) করা যেতে পারে। এই উদাহরণে, আমরা দেখব কিভাবে Java দিয়ে একটি ডিরেক্টরি এবং তার ভিতরের সমস্ত ফাইলগুলি জিপ ফাইলে কম্প্রেস করা যায়।
উদাহরণ: Multiple ফাইল এবং ডিরেক্টরি কম্প্রেস করা
এখানে একটি ডিরেক্টরি এবং তার সব সাব-ডিরেক্টরি ও ফাইলগুলিকে একটি ZIP ফাইলে কম্প্রেস করার উদাহরণ দেওয়া হলো:
কোড:
import java.io.*;
import java.util.zip.*;
public class ZipDirectoryExample {
public static void main(String[] args) {
// কম্প্রেস করার জন্য ডিরেক্টরি এবং ZIP ফাইলের পাথ
String directoryPath = "src_directory"; // আপনার ডিরেক্টরি পাথ দিন
String zipFilePath = "compressed.zip"; // কম্প্রেস করা ZIP ফাইলের পাথ
try {
// ZIP ফাইল তৈরি করতে FileOutputStream এবং ZipOutputStream ব্যবহার করা
FileOutputStream fos = new FileOutputStream(zipFilePath);
ZipOutputStream zos = new ZipOutputStream(fos);
// ডিরেক্টরি কম্প্রেস করার জন্য recursive ফাংশন কল করুন
File directoryToZip = new File(directoryPath);
zipDirectory(directoryToZip, directoryToZip.getName(), zos);
// ZipOutputStream বন্ধ করুন
zos.close();
System.out.println("ফাইল এবং ডিরেক্টরি সফলভাবে ZIP ফাইলে কম্প্রেস করা হয়েছে।");
} catch (IOException e) {
e.printStackTrace();
}
}
// Recursive method to zip a directory
private static void zipDirectory(File folderToZip, String parentFolderName, ZipOutputStream zos) throws IOException {
// যদি ফোল্ডারটি একটি ডিরেক্টরি হয়
if (folderToZip.isDirectory()) {
File[] files = folderToZip.listFiles();
// প্রতিটি ফাইল বা সাব-ডিরেক্টরি লুপ করুন
for (File file : files) {
zipDirectory(file, parentFolderName + File.separator + file.getName(), zos);
}
} else {
// ফাইলটির জন্য একটি নতুন ZipEntry তৈরি করুন
FileInputStream fis = new FileInputStream(folderToZip);
ZipEntry zipEntry = new ZipEntry(parentFolderName);
zos.putNextEntry(zipEntry);
// ফাইলের ডেটা জিপ ফাইলে লিখুন
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) >= 0) {
zos.write(buffer, 0, length);
}
// ZipEntry বন্ধ করুন
zos.closeEntry();
fis.close();
}
}
}
কোডের ব্যাখ্যা:
FileOutputStreamএবংZipOutputStream:ZipOutputStreamব্যবহার করে একটি নতুন ZIP ফাইল তৈরি করা হচ্ছে। এই স্ট্রীমের মাধ্যমে ফাইলগুলি কম্প্রেস করে ZIP ফাইলে সংরক্ষণ করা হয়।
zipDirectory()রিকর্সিভ ফাংশন:- এই ফাংশনটি ডিরেক্টরি এবং তার ভিতরের সমস্ত ফাইল এবং সাব-ডিরেক্টরি রিকর্সিভভাবে কম্প্রেস করে। প্রথমে ডিরেক্টরির মধ্যে যদি অন্য কোনো সাব-ডিরেক্টরি থাকে, তাহলে সেই সাব-ডিরেক্টরি গুলিকে জিপ ফাইলে অ্যাড করা হয়।
- ফোল্ডার এবং ফাইল কম্প্রেশন:
ZipEntryতৈরি করে, এবংZipOutputStream.putNextEntry()ব্যবহার করে প্রতিটি ফাইল বা ডিরেক্টরি এন্ট্রি হিসেবে ZIP ফাইলে অ্যাড করা হয়।FileInputStreamব্যবহার করে ফাইলের কনটেন্ট ZIP ফাইলে লেখার জন্য ডেটা পড়া হয়।
- Recursive Process:
zipDirectory()ফাংশনটি রিকার্সিভভাবে সমস্ত সাব-ডিরেক্টরি এবং ফাইল প্রক্রিয়া করে। এর মাধ্যমে যে কোনো গভীরতা পর্যন্ত ডিরেক্টরি স্ট্রাকচার হ্যান্ডেল করা যায়।
- ফাইলের কনটেন্ট জিপ ফাইলে লেখার জন্য
byte[] bufferব্যবহার করা হয়। প্রতিটি ফাইল পড়ার পর, তা ZIP ফাইলে লেখা হয়।
কিছু গুরুত্বপূর্ণ পয়েন্ট:
- ডিরেক্টরি স্ট্রাকচার সংরক্ষণ: এই কোডটি নিশ্চিত করে যে, ZIP ফাইলে ডিরেক্টরি এবং তার ভিতরের সাব-ডিরেক্টরি গুলি সঠিকভাবে সংরক্ষিত হয়।
- Recursive Approach: একটি রিকার্সিভ পদ্ধতি ব্যবহার করা হয়েছে যাতে ফোল্ডার স্ট্রাকচার এবং তার ভিতরের সকল ফাইল সঠিকভাবে জিপ করা যায়।
- কম্প্রেশন: ZIP ফাইল তৈরির সময় ফাইলগুলি কম্প্রেস করা হয়, যা ডেটা সঞ্চয় এবং ট্রান্সফারের ক্ষেত্রে কার্যকর।
উদাহরণ ফোল্ডার স্ট্রাকচার:
ধরা যাক আপনার src_directory এর মধ্যে ফোল্ডার এবং ফাইলগুলো এমনভাবে রয়েছে:
src_directory/
├── file1.txt
├── file2.txt
└── subfolder/
└── file3.txt
অফার করা ZIP আউটপুট:
compressed.zip/
├── file1.txt
├── file2.txt
└── subfolder/
└── file3.txt
সারাংশ:
Java তে java.util.zip প্যাকেজ ব্যবহার করে একাধিক ফাইল এবং ডিরেক্টরি কম্প্রেস করা সম্ভব। এই উদাহরণে আমরা একটি ডিরেক্টরি এবং তার সব ফাইল ও সাব-ডিরেক্টরি জিপ ফাইলে কম্প্রেস করেছি। রিকার্সিভ পদ্ধতি ব্যবহার করে আপনি কোন ডিরেক্টরি স্ট্রাকচার এবং ফাইলকেও কম্প্রেস করতে পারবেন।
Read more