Java NIO (New Input/Output) API-এর একটি গুরুত্বপূর্ণ উপাদান হল WatchService, যা ফাইল সিস্টেমে পরিবর্তন (যেমন ফাইল তৈরি, মুছে ফেলা বা পরিবর্তন) পর্যবেক্ষণ (monitoring) করতে ব্যবহৃত হয়। এটি java.nio.file প্যাকেজে অন্তর্ভুক্ত একটি ক্লাস, যা ফাইল সিস্টেমে অ্যাক্টিভিটি ট্র্যাক করতে সহায়ক। WatchService আপনার অ্যাপ্লিকেশনকে কোনও ফাইল বা ডিরেক্টরিতে পরিবর্তন হলে তৎক্ষণাৎ জানানোর জন্য ব্যবহার করা হয়, এবং এটি event-driven ভিত্তিক কার্যপ্রণালীতে কাজ করে।
WatchService এর কাজ কী?
WatchService ব্যবহার করার মাধ্যমে, আপনি এক বা একাধিক ফাইল বা ডিরেক্টরি পর্যবেক্ষণ করতে পারেন এবং ফাইল সিস্টেমে যেকোনো পরিবর্তন হলে সেই পরিবর্তনগুলোর সিগন্যাল পান। এটি বিভিন্ন ফাইল সিস্টেম ইভেন্ট যেমন:
- ফাইল তৈরি
- ফাইল মুছে ফেলা
- ফাইল পরিবর্তন
- ডিরেক্টরি তৈরি/মুছে ফেলা
এই ইভেন্টগুলোতে কার্যকরীভাবে প্রতিক্রিয়া জানাতে সহায়ক।
WatchService ব্যবহারের সাধারণ কার্যপ্রণালী
- WatchService তৈরি করা:
FileSystems.getDefault().newWatchService()মেথড ব্যবহার করেWatchServiceতৈরি করা হয়। - WatchKey তৈরি করা:
Path.register()মেথড ব্যবহার করেWatchServiceএর সাথে নির্দিষ্ট ফাইল বা ডিরেক্টরি রেজিস্টার করা হয়। এটি পর্যবেক্ষণের জন্য সংশ্লিষ্ট ইভেন্ট সিগন্যাল গ্রহণ করে। - ইভেন্ট চেক করা:
watchService.take()বাwatchService.poll()ব্যবহার করে সিস্টেমে কোন ইভেন্ট ঘটেছে কিনা তা পরীক্ষা করা হয়। - ইভেন্ট প্রক্রিয়া করা: সংশ্লিষ্ট ইভেন্টের প্রতি প্রতিক্রিয়া জানানো হয়, যেমন ফাইল তৈরি হওয়া বা মুছে যাওয়া।
WatchService এর উদাহরণ
এখানে একটি উদাহরণ দেওয়া হয়েছে যা একটি নির্দিষ্ট ডিরেক্টরিতে পরিবর্তন মনিটর করে।
উদাহরণ: WatchService দিয়ে ফাইল সিস্টেম পর্যবেক্ষণ
import java.nio.file.*;
import java.nio.file.attribute.*;
import java.io.IOException;
public class WatchServiceExample {
public static void main(String[] args) throws IOException, InterruptedException {
// WatchService তৈরি করা
WatchService watchService = FileSystems.getDefault().newWatchService();
// পর্যবেক্ষণ করার জন্য পাথ নির্ধারণ
Path path = Paths.get("C:/watched_directory");
// পাথের জন্য WatchService রেজিস্টার করা
path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE,
StandardWatchEventKinds.ENTRY_DELETE,
StandardWatchEventKinds.ENTRY_MODIFY);
System.out.println("Monitoring directory for changes...");
// ইভেন্টের জন্য অপেক্ষা করা
while (true) {
WatchKey key = watchService.take(); // ইভেন্ট পাওয়ার জন্য ব্লক করা
for (WatchEvent<?> event : key.pollEvents()) {
// ইভেন্টের টাইপ (CREATE, DELETE, MODIFY)
WatchEvent.Kind<?> kind = event.kind();
Path fileName = (Path) event.context();
System.out.println("Event: " + kind + " - " + fileName);
}
// ইভেন্টের সাথে সম্পর্কিত চাবি রিসেট করা
boolean valid = key.reset();
if (!valid) {
break; // যদি চাবিটি অবৈধ হয়ে যায় তবে লুপ বন্ধ হবে
}
}
}
}
ব্যাখ্যা:
- WatchService তৈরি:
FileSystems.getDefault().newWatchService()ব্যবহার করে একটিWatchServiceতৈরি করা হয়েছে। - Path রেজিস্টার করা:
path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY)মেথড ব্যবহার করেwatched_directoryডিরেক্টরির জন্য ENTRY_CREATE, ENTRY_DELETE, এবং ENTRY_MODIFY ইভেন্ট রেজিস্টার করা হয়েছে। - ইভেন্ট গ্রহণ:
watchService.take()মেথডের মাধ্যমে ইভেন্টগুলি গ্রহণ করা হচ্ছে এবং প্রতিটি ইভেন্টের জন্য তথ্য প্রিন্ট করা হচ্ছে। - WatchKey রিসেট:
key.reset()মেথডের মাধ্যমে ইভেন্ট প্রক্রিয়া শেষে চাবি রিসেট করা হচ্ছে।
এই উদাহরণটি একটি ডিরেক্টরির মধ্যে ফাইল তৈরি, মুছে ফেলা, বা পরিবর্তন হওয়ার সময় তা পর্যবেক্ষণ করে এবং ইভেন্ট সনাক্ত হলে তা প্রদর্শন করে।
WatchService এর সুবিধা
- Real-time Monitoring: এটি ফাইল সিস্টেমের পরিবর্তনগুলিকে রিয়েল-টাইমে পর্যবেক্ষণ করতে সহায়তা করে।
- Event-driven: ইভেন্ট-ড্রিভেন ভিত্তিক ব্যবস্থাপনা হওয়ায়, এটি কার্যকরীভাবে সিস্টেমের পারফরম্যান্স কমায়।
- No Polling: Polling এর পরিবর্তে ওয়াচ সার্ভিস ইভেন্ট পেতে ব্লকিং বা নন-ব্লকিং মোডে কাজ করতে পারে, যা সিস্টেমের প্রক্রিয়া ত্বরান্বিত করে।
- Multithreading: এটি একাধিক থ্রেডের মধ্যে ফাইল সিস্টেম মনিটরিংয়ের জন্য কার্যকরী এবং স্কেলেবল উপায় প্রদান করে।
WatchService Java NIO এর একটি অত্যন্ত কার্যকরী উপাদান যা ফাইল সিস্টেমে ঘটে যাওয়া পরিবর্তনগুলি মনিটর করার জন্য ব্যবহৃত হয়। এটি ফাইল তৈরি, মুছে ফেলা বা পরিবর্তনের মতো গুরুত্বপূর্ণ ইভেন্টগুলোকে ট্র্যাক করতে সহায়ক এবং ইভেন্ট-ড্রিভেন অ্যাপ্লিকেশন ডিজাইন করার জন্য একটি অত্যন্ত গুরুত্বপূর্ণ টুল। WatchService এর মাধ্যমে আপনি সিস্টেমের I/O কার্যক্রম আরো দক্ষভাবে পরিচালনা করতে পারেন, এবং এটি ফাইল সিস্টেমের পর্যবেক্ষণে সময় ও রিসোর্স ব্যবস্থাপনায় কার্যকরী সমাধান প্রদান করে।
Read more