Apache Commons IO লাইব্রেরি ফাইল এবং ডিরেক্টরি ম্যানিপুলেশনের জন্য অনেক কার্যকরী ইউটিলিটি সরবরাহ করে, যার মধ্যে Wildcard এবং Regex ব্যবহার করে ফাইল ফিল্টার করা অন্যতম। এই ফিচারটি ফাইল সিস্টেমে নির্দিষ্ট প্যাটার্ন বা কন্ডিশন অনুসারে ফাইলগুলো চয়ন করতে সহায়তা করে। এটি বিশেষ করে বড় ডিরেক্টরি বা ফাইল সিস্টেমে কাজ করার সময়ে খুবই উপকারী।
Wildcard এবং Regex এর মাধ্যমে ফাইল ফিল্টার করা হলে, আপনি নির্দিষ্ট ফাইল এক্সটেনশন, নাম বা অন্যান্য প্যাটার্নের ভিত্তিতে ফাইলগুলো ফিল্টার করতে পারবেন।
Wildcard সাধারণত ফাইল নামের অংশের সাথে ম্যাচ করার জন্য ব্যবহৃত হয়, যেখানে বিশেষ চিহ্ন যেমন *
(যেকোনো সংখ্যক অক্ষর) এবং ?
(একটি অক্ষর) ব্যবহার করা হয়।
WildcardFileFilter ক্লাস Apache Commons IO তে একটি ফাইল ফিল্টার ক্লাস, যা ওয়াইল্ডকার্ড প্যাটার্নের মাধ্যমে ফাইল ফিল্টার করতে সহায়তা করে।
import org.apache.commons.io.filefilter.WildcardFileFilter;
import java.io.File;
import java.io.FileFilter;
public class WildcardFileFilterExample {
public static void main(String[] args) {
// Create a File object pointing to a specific directory
File directory = new File("my_directory");
// Create a FileFilter using Wildcard to filter files with .txt extension
FileFilter fileFilter = new WildcardFileFilter("*.txt");
// Get all .txt files in the directory
File[] textFiles = directory.listFiles(fileFilter);
// Print the file names
for (File file : textFiles) {
System.out.println(file.getName());
}
}
}
এখানে:
.txt
এক্সটেনশনের ফাইলগুলো ফিল্টার করেছি।*
চিহ্ন ব্যবহার করা হয়েছে যাতে সমস্ত .txt
ফাইল নির্বাচন করা যায়, যেগুলোর নাম যেকোনো হতে পারে।*.jpg
: সকল JPEG ছবি ফাইল।file?.txt
: যেসব ফাইলের নাম file1.txt, file2.txt ইত্যাদি হয়।report*
: যে কোনো ফাইল যার নাম report দিয়ে শুরু হয়।Regex (Regular Expression) ব্যবহার করে আপনি আরও জটিল প্যাটার্নের মাধ্যমে ফাইল নাম ফিল্টার করতে পারেন। RegexFileFilter ক্লাস Apache Commons IO তে রয়েছে, যা আপনাকে regular expressions এর মাধ্যমে ফাইল ফিল্টার করার সুযোগ দেয়।
import org.apache.commons.io.filefilter.RegexFileFilter;
import java.io.File;
import java.io.FileFilter;
public class RegexFileFilterExample {
public static void main(String[] args) {
// Create a File object pointing to a specific directory
File directory = new File("my_directory");
// Create a FileFilter using Regex to filter files that start with 'report' and end with .txt
FileFilter fileFilter = new RegexFileFilter("^report.*\\.txt$");
// Get all files matching the regex pattern
File[] reportFiles = directory.listFiles(fileFilter);
// Print the file names
for (File file : reportFiles) {
System.out.println(file.getName());
}
}
}
এখানে:
^
এবং $
হল regex এর বর্ডার চিহ্ন, যেগুলি ফাইল নামের শুরু এবং শেষের সাথে মিলে।^report.*\\.txt$
: ফাইল নামের শুরুতে report এবং শেষের দিকে .txt থাকতে হবে।.*\\.jpg$
: যেকোনো ফাইল যার এক্সটেনশন .jpg।^file[0-9]+\\.txt$
: ফাইল নামের শুরুতে file এবং পরবর্তীতে এক বা একাধিক ডিজিট থাকতে হবে এবং ফাইলের এক্সটেনশন .txt হতে হবে।আপনি Wildcard এবং Regex ফিল্টার একসাথে ব্যবহার করতে পারেন, যেমন ফাইলের নামের একটি অংশ ওয়াইল্ডকার্ড প্যাটার্ন দিয়ে এবং আরেকটি অংশ regex প্যাটার্ন দিয়ে ফিল্টার করা।
import org.apache.commons.io.filefilter.WildcardFileFilter;
import org.apache.commons.io.filefilter.RegexFileFilter;
import org.apache.commons.io.filefilter.IOFileFilter;
import java.io.File;
import java.io.FileFilter;
public class CombinedFilterExample {
public static void main(String[] args) {
// Create a File object pointing to a specific directory
File directory = new File("my_directory");
// Create WildcardFileFilter to filter files with '.txt' extension
IOFileFilter wildcardFilter = new WildcardFileFilter("*.txt");
// Create RegexFileFilter to filter files starting with 'report' and ending with '.txt'
IOFileFilter regexFilter = new RegexFileFilter("^report.*\\.txt$");
// Combine both filters
IOFileFilter combinedFilter = IOFileFilter.and(wildcardFilter, regexFilter);
// Get all files matching both filters
File[] filteredFiles = directory.listFiles((FileFilter) combinedFilter);
// Print the file names
for (File file : filteredFiles) {
System.out.println(file.getName());
}
}
}
এখানে:
IOFileFilter.and()
পদ্ধতি ব্যবহার করে উভয় ফিল্টার একসাথে প্রয়োগ করা হয়েছে।ধরা যাক, আপনি একটি ডিরেক্টরিতে থাকা .txt এবং .csv এক্সটেনশনের ফাইলগুলো ফিল্টার করতে চান, যেগুলোর নাম log দিয়ে শুরু এবং একটি নির্দিষ্ট প্যাটার্নের সাথে মেলে।
import org.apache.commons.io.filefilter.RegexFileFilter;
import org.apache.commons.io.filefilter.WildcardFileFilter;
import org.apache.commons.io.filefilter.IOFileFilter;
import java.io.File;
public class MultiplePatternsExample {
public static void main(String[] args) {
// Create a File object pointing to a specific directory
File directory = new File("my_directory");
// Create WildcardFileFilter to filter files with .txt and .csv extension
IOFileFilter wildcardFilter = new WildcardFileFilter("*.{txt,csv}");
// Create RegexFileFilter to filter files starting with 'log' and containing '2021'
IOFileFilter regexFilter = new RegexFileFilter("^log.*2021.*");
// Combine both filters
IOFileFilter combinedFilter = IOFileFilter.and(wildcardFilter, regexFilter);
// Get all files matching both filters
File[] filteredFiles = directory.listFiles((FileFilter) combinedFilter);
// Print the filtered file names
for (File file : filteredFiles) {
System.out.println(file.getName());
}
}
}
এখানে:
Apache Commons IO লাইব্রেরি দিয়ে Wildcard এবং Regex ব্যবহার করে আপনি সহজে ফাইল সিস্টেমে ফিল্টারিং করতে পারেন। WildcardFileFilter এবং RegexFileFilter ক্লাসগুলির মাধ্যমে আপনি নির্দিষ্ট প্যাটার্ন বা এক্সটেনশনের ভিত্তিতে ফাইলগুলো নির্বাচন করতে পারেন। একাধিক ফিল্টারকে একত্রিত (combine) করে আরও কাস্টমাইজড ফিল্টারিংও করা সম্ভব। এই ফিচারটি বিশেষভাবে কার্যকরী যখন ডিরেক্টরি বা ফাইল সিস্টেমে বড় ডেটাসেট থাকে এবং নির্দিষ্ট প্যাটার্ন অনুযায়ী ফাইল নির্বাচন করতে হয়।
common.read_more