Java NIO (New I/O) এর মধ্যে একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হল WatchService, যা ফাইল সিস্টেমের পরিবর্তন মনিটর করতে ব্যবহৃত হয়। এটি আপনাকে একটি ডিরেক্টরির মধ্যে ফাইল এবং ডিরেক্টরি সংক্রান্ত ইভেন্টগুলি পর্যবেক্ষণ করতে এবং সেই অনুযায়ী অ্যাপ্লিকেশন প্রতিক্রিয়া জানাতে সক্ষম করে। উদাহরণস্বরূপ, আপনি WatchService ব্যবহার করে ফাইল তৈরি, মুছে ফেলা বা পরিবর্তন হওয়ার মতো ঘটনাগুলি পর্যবেক্ষণ করতে পারেন।
Java NIO এর WatchService API ব্যবহার করে, আপনি ফাইল সিস্টেমের পরিবর্তন পর্যবেক্ষণ করতে পারবেন এবং সেই পরিবর্তনের উপর ভিত্তি করে কিছু কাজ করতে পারবেন, যেমন ফাইল সিঙ্ক্রোনাইজেশন বা লগিং।
WatchService এর ধারণা
WatchService হল Java NIO-র একটি ক্লাস যা আপনাকে ফাইল সিস্টেমের জন্য ইভেন্ট মনিটরিং সক্ষম করে। এটি watchable ডিরেক্টরি বা ফাইল থেকে বিভিন্ন ইভেন্টের তথ্য সংগ্রহ করে, যেমন:
- ENTRY_CREATE: নতুন ফাইল তৈরি হলে
- ENTRY_DELETE: ফাইল মুছে ফেলা হলে
- ENTRY_MODIFY: ফাইল পরিবর্তিত হলে
এই ইভেন্টগুলির উপর ভিত্তি করে আপনি সিস্টেমের কার্যক্রম পরিচালনা করতে পারেন, যেমন ফাইলের মধ্যে পরিবর্তন হওয়া ডেটা আপডেট করা, অথবা ফাইল কপি বা ব্যাকআপ করা।
WatchService ব্যবহার করার পদ্ধতি
১. WatchService তৈরি করা
প্রথমে, FileSystems.getDefault().newWatchService() মেথড ব্যবহার করে একটি WatchService তৈরি করতে হবে।
২. ডিরেক্টরি রেজিস্টার করা
তারপর, আপনার নজরদারির জন্য একটি ডিরেক্টরি রেজিস্টার করতে হবে। এটি করার জন্য Path এবং WatchEvent.Kind ব্যবহৃত হয়।
৩. ইভেন্ট মনিটরিং করা
ইভেন্টগুলি take() মেথডের মাধ্যমে সনাক্ত করা হয়, যা যতক্ষণ না একটি ইভেন্ট ঘটে ততক্ষণ ব্লক করে থাকে।
উদাহরণ: WatchService ব্যবহার করে ফাইল সিস্টেম মনিটরিং
এখানে একটি উদাহরণ দেয়া হলো যেখানে একটি নির্দিষ্ট ডিরেক্টরির মধ্যে ফাইলের পরিবর্তন মনিটর করা হচ্ছে।
import java.nio.file.*;
import java.nio.file.attribute.*;
import java.util.*;
public class FileSystemMonitor {
public static void main(String[] args) {
try {
// মনিটর করার জন্য ডিরেক্টরি নির্বাচন করা
Path path = Paths.get("C:/example/directory"); // আপনার ডিরেক্টরি পথ দিন
// WatchService তৈরি করা
WatchService watchService = FileSystems.getDefault().newWatchService();
// ডিরেক্টরিতে পরিবর্তন পর্যবেক্ষণ করার জন্য রেজিস্টার করা
path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE,
StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY);
System.out.println("Watching directory: " + path.toString());
// মনিটরিং চালানো
while (true) {
// ইভেন্টের জন্য অপেক্ষা করা
WatchKey key = watchService.take(); // Blocking call
// ইভেন্ট গুলি প্রক্রিয়া করা
for (WatchEvent<?> event : key.pollEvents()) {
WatchEvent.Kind<?> kind = event.kind();
Path eventPath = (Path) event.context();
// ইভেন্ট প্রিন্ট করা
System.out.println(kind.name() + ": " + eventPath);
}
// WatchKey পুনরায় রিসেট করা
boolean valid = key.reset();
if (!valid) {
break; // যদি রেজিস্ট্রেশন ব্যর্থ হয়, তাহলে লুপ শেষ হবে
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
কোডের ব্যাখ্যা:
- Path path = Paths.get("C:/example/directory"): এটি সেই ডিরেক্টরি পাথ নির্দেশ করে যা আপনি মনিটর করতে চান।
- WatchService watchService = FileSystems.getDefault().newWatchService(): WatchService তৈরি করা হচ্ছে, যা ডিরেক্টরির পরিবর্তন মনিটর করবে।
- path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY): এখানে, ডিরেক্টরি রেজিস্টার করা হয়েছে এবং তার মধ্যে ফাইল তৈরি, মুছে ফেলা এবং পরিবর্তন হওয়ার জন্য ইভেন্টগুলি মনিটর করা হচ্ছে।
- while (true): একটি ইনফিনিট লুপের মাধ্যমে, ইভেন্টের জন্য অপেক্ষা করা হয় এবং ইভেন্টগুলি প্রক্রিয়া করা হয়।
- key.pollEvents(): এটি WatchKey থেকে ইভেন্টগুলো সংগ্রহ করে এবং প্রতিটি ইভেন্ট প্রক্রিয়া করা হয়।
WatchService এর সুবিধা
- দ্রুত ফাইল সিস্টেম পর্যবেক্ষণ: WatchService ব্যবহারের মাধ্যমে আপনি খুব দ্রুত ফাইল সিস্টেমে ঘটিত পরিবর্তনগুলি পর্যবেক্ষণ করতে পারেন।
- নিরবচ্ছিন্ন পর্যবেক্ষণ: এটি ব্লকিং মেথড হিসেবে কাজ করে, যার ফলে আপনি নিরবচ্ছিন্নভাবে পরিবর্তনগুলি মনিটর করতে পারেন।
- অ্যাসিঙ্ক্রোনাস ডেটা হ্যান্ডলিং: আপনি অ্যাসিঙ্ক্রোনাসভাবে ফাইল সিস্টেমের বিভিন্ন পরিবর্তনের উপর ভিত্তি করে বিভিন্ন কার্যক্রম সম্পাদন করতে পারেন।
- কমপ্লেক্স সিস্টেম মনিটরিং: একটি সহজ কনফিগারেশন দ্বারা আপনি একাধিক ইভেন্ট মনিটরিং এবং বিভিন্ন সিস্টেম টাস্ক পরিচালনা করতে সক্ষম।
WatchService Java NIO এর একটি শক্তিশালী ফিচার যা ফাইল সিস্টেমে ঘটিত পরিবর্তনগুলি মনিটর করতে ব্যবহৃত হয়। এটি অ্যাসিঙ্ক্রোনাস ফাইল সিস্টেম মনিটরিং সম্ভব করে, যেখানে ফাইল তৈরি, মুছে ফেলা বা পরিবর্তন হওয়ার মতো ইভেন্টগুলির উপর ভিত্তি করে অ্যাপ্লিকেশন বিভিন্ন কার্যক্রম গ্রহণ করতে পারে। WatchService ফাইল সিস্টেমের জন্য একটি অত্যন্ত কার্যকরী টুল, যা দ্রুত, নির্ভরযোগ্য এবং স্কেলেবল সমাধান প্রদান করে।
Read more