Apache Commons IO লাইব্রেরি ফাইল এবং ডিরেক্টরি সম্পর্কিত বিভিন্ন কার্যকলাপ সহজ এবং কার্যকরী করে তোলে। Recursive Directory Traversing এবং Custom Directory Walking দুটি গুরুত্বপূর্ণ কাজ, যেখানে একটি ডিরেক্টরির মধ্যে সব ফাইল বা সাবডিরেক্টরি অনুসন্ধান করা হয়, এবং যখন আমাদের কাস্টম লজিক বা ফিল্টারিং প্রয়োজন।
এই কাজগুলো সাধারণত ফাইল সিস্টেম থেকে ডেটা এক্সট্র্যাক্ট বা ম্যানিপুলেট করার জন্য ব্যবহৃত হয়। Apache Commons IO লাইব্রেরি FileUtils এবং DirectoryWalker ক্লাস সরবরাহ করে, যেগুলি রিকর্সিভ ডিরেক্টরি ট্রাভার্সিং এবং কাস্টম ডিরেক্টরি ওয়াকিং (directory walking) করতে ব্যবহৃত হয়।
১. Recursive Directory Traversing with FileUtils
FileUtils ক্লাসের সাহায্যে সহজেই রিকর্সিভ ডিরেক্টরি ট্রাভার্সিং করা সম্ভব। FileUtils.listFiles() মেথডটি রিকর্সিভভাবে ডিরেক্টরি এবং সাবডিরেক্টরিগুলির মধ্যে ফাইলগুলোকে একটি তালিকায় যুক্ত করে।
উদাহরণ: রিকর্সিভ ফাইল লিস্টিং
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
public class RecursiveDirectoryTraversingExample {
public static void main(String[] args) {
File directory = new File("path/to/your/directory");
// .txt এক্সটেনশন সহ সব ফাইল লিস্ট করতে রিকর্সিভ ফাইল লিস্টিং
Collection<File> files = FileUtils.listFiles(directory, new String[] {"txt"}, true);
for (File file : files) {
System.out.println(file.getAbsolutePath());
}
}
}
ব্যাখ্যা:
FileUtils.listFiles(directory, new String[] {"txt"}, true)মেথডটি ডিরেক্টরি এবং তার সাবডিরেক্টরিগুলির মধ্যে.txtএক্সটেনশন সহ সমস্ত ফাইল রিকর্সিভভাবে খুঁজে বের করে।- তৃতীয় প্যারামিটার
trueবলে যে এটি রিকর্সিভভাবে ডিরেক্টরি ট্রাভার্স করবে।
২. Custom Directory Walking with DirectoryWalker
যখন আপনি কাস্টম লজিক ব্যবহার করে ডিরেক্টরি ট্রাভার্স করতে চান, তখন DirectoryWalker ক্লাসটি খুবই উপকারী। এটি আপনাকে ডিরেক্টরি এবং ফাইলের প্রতি কাস্টম আচরণ নির্ধারণ করতে দেয়।
উদাহরণ: কাস্টম ডিরেক্টরি ওয়াকিং
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.TrueFileFilter;
import org.apache.commons.io.filefilter.FileFilterUtils;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
public class CustomDirectoryWalkingExample {
public static void main(String[] args) {
File directory = new File("path/to/your/directory");
// ডিরেক্টরি ওয়াকিং কাস্টম ফিল্টার ব্যবহার করে
Iterator<File> iterator = FileUtils.iterateFiles(directory, FileFilterUtils.suffixFileFilter(".txt"), TrueFileFilter.TRUE);
while (iterator.hasNext()) {
File file = iterator.next();
// কাস্টম লজিক প্রয়োগ
System.out.println("Processing file: " + file.getAbsolutePath());
}
}
}
ব্যাখ্যা:
FileUtils.iterateFiles(directory, FileFilterUtils.suffixFileFilter(".txt"), TrueFileFilter.TRUE)মেথডটি.txtএক্সটেনশন সহ সমস্ত ফাইল ডিরেক্টরি এবং তার সাবডিরেক্টরিগুলির মধ্যে খুঁজে বের করে।FileFilterUtils.suffixFileFilter(".txt")ফিল্টার ব্যবহার করে শুধুমাত্র.txtএক্সটেনশন সহ ফাইলগুলিকে নির্বাচিত করা হয়েছে।TrueFileFilter.TRUEসব ফাইল এবং ডিরেক্টরিকে ফিল্টার হিসেবে গ্রহণ করে (এটি কাস্টম ফিল্টার নির্ধারণে সাহায্য করতে পারে)।
৩. Custom Directory Walker with DirectoryWalker Class
DirectoryWalker ক্লাস আরও কাস্টমাইজড এবং উন্নত ডিরেক্টরি ট্রাভার্সিংয়ের জন্য ব্যবহৃত হয়। এই ক্লাসের মাধ্যমে আপনি ফাইল এবং ডিরেক্টরি ট্রাভার্স করার জন্য নিজস্ব কাস্টম লজিক সংজ্ঞায়িত করতে পারেন।
উদাহরণ: কাস্টম DirectoryWalker ইমপ্লিমেন্টেশন
import org.apache.commons.io.DirectoryWalker;
import java.io.File;
import java.io.IOException;
public class CustomDirectoryWalkerExample extends DirectoryWalker {
public CustomDirectoryWalkerExample() {
// কাস্টম ইমপ্লিমেন্টেশনের জন্য প্রয়োজনীয় কন্সট্রাক্টর
}
@Override
protected void handleFile(File file, int depth) {
// কাস্টম লজিক যা ফাইলের উপর প্রয়োগ হবে
System.out.println("Processing file: " + file.getAbsolutePath());
}
@Override
protected void handleDirectory(File directory, int depth) {
// কাস্টম লজিক যা ডিরেক্টরির উপর প্রয়োগ হবে
System.out.println("Entering directory: " + directory.getAbsolutePath());
}
public static void main(String[] args) throws IOException {
File directory = new File("path/to/your/directory");
// DirectoryWalker এর কাস্টম ইমপ্লিমেন্টেশন ব্যবহার করা
CustomDirectoryWalkerExample walker = new CustomDirectoryWalkerExample();
walker.walk(directory, null); // `null` pass করা হয় কারণ এখানে ফিল্টার ব্যবহার করা হয়নি
}
}
ব্যাখ্যা:
handleFile(File file, int depth): এই মেথডটি কাস্টম লজিক প্রয়োগ করতে ব্যবহৃত হয়, যা প্রতিটি ফাইলের জন্য চলে।handleDirectory(File directory, int depth): এই মেথডটি ডিরেক্টরি ট্রাভার্স করার সময় প্রতিটি ডিরেক্টরির জন্য চলে।
DirectoryWalker অত্যন্ত শক্তিশালী এবং কাস্টম ডিরেক্টরি ওয়াকিংয়ের জন্য ব্যবহার করা হয়, যেখানে আপনি ফাইল এবং ডিরেক্টরি সম্পর্কিত নিজের লজিক প্রয়োগ করতে পারেন।
সারাংশ
Recursive Directory Traversing এবং Custom Directory Walking অ্যাপাচি কমন্স আইও লাইব্রেরির দুটি অত্যন্ত গুরুত্বপূর্ণ ফিচার যা ফাইল সিস্টেমে ডিরেক্টরি ট্রাভার্সিং এবং ফাইলের প্রক্রিয়াকরণের কাজগুলো সহজ করে তোলে।
- FileUtils ক্লাস রিকর্সিভ ডিরেক্টরি ট্রাভার্সিংয়ের জন্য সহজ এবং দ্রুত উপায় প্রদান করে।
- DirectoryWalker ক্লাস কাস্টম ডিরেক্টরি ট্রাভার্সিংয়ের জন্য একটি শক্তিশালী এবং নমনীয় উপায় যা আপনাকে কাস্টম লজিক প্রয়োগ করতে সাহায্য করে।
এই দুটি পদ্ধতির মাধ্যমে আপনি জটিল ফাইল সিস্টেমের কাজগুলো খুব সহজে এবং কার্যকরীভাবে পরিচালনা করতে পারবেন।
Read more