Java NIO (New Input/Output) API একটি শক্তিশালী টুল যা উন্নত I/O অপারেশন পরিচালনা করতে সাহায্য করে। এর মধ্যে WatchService একটি গুরুত্বপূর্ণ কনসেপ্ট, যা ফাইল সিস্টেমে পরিবর্তনগুলি মনিটর করতে ব্যবহৃত হয়। ফাইল বা ডিরেক্টরির মধ্যে কোনও পরিবর্তন (যেমন ফাইল তৈরি, মোছা, আপডেট হওয়া) হলে আপনি তা পর্যবেক্ষণ করতে পারেন। WatchService Java 7-এ NIO 2 এর অংশ হিসেবে যোগ করা হয়েছিল, এবং এটি ফাইল সিস্টেমে সিস্টেম পর্যবেক্ষণ বা File System Monitoring এর জন্য ব্যবহৃত হয়।
WatchService এর ধারণা
WatchService একটি API যা Java অ্যাপ্লিকেশনকে নির্দিষ্ট ডিরেক্টরি বা ফোল্ডারে যে কোনো পরিবর্তন (ফাইল তৈরি, মোছা, পরিবর্তন ইত্যাদি) শনাক্ত করার সুবিধা প্রদান করে। এটি একটি event-driven মডেল ব্যবহার করে, যেখানে একটি থ্রেড ফাইল সিস্টেমের পরিবর্তনগুলি "watch" করে এবং পরিবর্তনের ঘটনা ঘটলেই তা আপনাকে জানায়।
WatchService ব্যবহার করে, আপনি নন-ব্লকিং মোডে ফাইল সিস্টেমের কার্যকলাপ অনুসরণ করতে পারবেন, অর্থাৎ আপনি অন্য কাজ করতে করতে ফাইল সিস্টেমের পরিবর্তন শনাক্ত করতে পারবেন।
WatchService এর প্রধান উপাদানসমূহ:
- WatchService: এটি মূল ক্লাস যা ফাইল সিস্টেম পরিবর্তনকে মনিটর করে।
- WatchKey: এটি একটি নির্দিষ্ট ডিরেক্টরি বা ফোল্ডারে একটি পর্যবেক্ষণ কীগঠন করে, যা পর্যবেক্ষণের ফলাফল (যেমন কোনো পরিবর্তন) প্রদান করে।
- WatchEvent: এটি একটি ঘটনার প্রতিনিধিত্ব করে যা ফাইল সিস্টেমে পরিবর্তন ঘটলে উৎপন্ন হয় (যেমন, ফাইল তৈরি, পরিবর্তন বা মুছে ফেলা)।
WatchService এর কার্যপ্রণালী
WatchService ব্যবহার করার প্রক্রিয়া নিম্নরূপ:
- WatchService তৈরি করা: প্রথমে একটি WatchService ইনস্ট্যান্স তৈরি করতে হয়।
- WatchKey তৈরি করা: তারপর যে ডিরেক্টরি বা ফোল্ডারটি মনিটর করতে চান তা রেজিস্টার করতে হয়।
- WatchEvent গ্রহণ করা: ফাইল সিস্টেমে কোনো পরিবর্তন হলে, সেই পরিবর্তনের ঘটনাগুলি
WatchEvent-এর মাধ্যমে পাওয়া যায়।
WatchService উদাহরণ
এখানে একটি উদাহরণ দেওয়া হলো যেখানে WatchService ব্যবহার করে একটি নির্দিষ্ট ডিরেক্টরি পর্যবেক্ষণ করা হচ্ছে এবং ফাইল সিস্টেমের পরিবর্তন (যেমন ফাইল তৈরি, মুছে ফেলা) ট্র্যাক করা হচ্ছে।
import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.*;
import static java.nio.file.StandardWatchEventKinds.*;
public class FileSystemMonitor {
public static void main(String[] args) throws IOException, InterruptedException {
// WatchService তৈরি করা
WatchService watchService = FileSystems.getDefault().newWatchService();
// পর্যবেক্ষণ করার জন্য ডিরেক্টরি সেট করা
Path path = Paths.get("path/to/monitor");
path.register(watchService, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY);
System.out.println("Monitoring directory for changes...");
// WatchKey এর মাধ্যমে ইভেন্ট গ্রহণ করা
while (true) {
WatchKey key = watchService.take(); // Blocking call
for (WatchEvent<?> event : key.pollEvents()) {
// পরিবর্তন ঘটলে ইভেন্ট প্রক্রিয়া করা
WatchEvent.Kind<?> kind = event.kind();
Path fileName = (Path) event.context();
System.out.println("Event: " + kind + " on file: " + fileName);
}
// ইভেন্টের পর WatchKey রিসেট করা
boolean valid = key.reset();
if (!valid) {
break;
}
}
}
}
ব্যাখ্যা:
- WatchService তৈরি করা হয়েছে
FileSystems.getDefault().newWatchService()দ্বারা। - Path.register()-এর মাধ্যমে আমরা একটি ডিরেক্টরি রেজিস্টার করেছি, যাতে
ENTRY_CREATE,ENTRY_DELETE, এবংENTRY_MODIFYপরিবর্তনগুলি মনিটর করা যায়। watchService.take()মেথডটি ব্লকিং কল, যা ডিরেক্টরিতে কোনো পরিবর্তন ঘটলে তা শনাক্ত করে।- WatchEvent ব্যবহার করে ঘটনার বিস্তারিত (যেমন ফাইল তৈরি, মুছে ফেলা, পরিবর্তন) প্রাপ্ত করা হয়।
এটি একটি সহজ উদাহরণ যেখানে আমরা একটি নির্দিষ্ট ডিরেক্টরি মনিটর করছি এবং সেখানে ফাইল তৈরি, মুছে ফেলা, বা পরিবর্তন ঘটলে তা দেখতে পাচ্ছি।
File System Monitoring এর প্রয়োজনীয়তা
১. স্বয়ংক্রিয়ভাবে ফাইল সিস্টেম পরিবর্তন ট্র্যাক করা
WatchService ক্লাস ফাইল সিস্টেমের পরিবর্তন ট্র্যাক করতে সক্ষম, যা বিভিন্ন অ্যাপ্লিকেশনগুলির জন্য কার্যকরী হতে পারে। উদাহরণস্বরূপ, আপনি একটি সার্ভার অ্যাপ্লিকেশন তৈরি করছেন যা কোনো ডিরেক্টরিতে নতুন ফাইল এলেই তা প্রক্রিয়া করবে, বা পুরোনো ফাইল মুছে ফেলার পর কিছু অ্যাকশন নেবে।
২. নিরাপত্তা এবং নজরদারি
ফাইল সিস্টেমে পরিবর্তনগুলি ট্র্যাক করা নিরাপত্তার জন্য অত্যন্ত গুরুত্বপূর্ণ হতে পারে, যেমন ফাইল অ্যাক্সেস বা অনুমোদিত পরিবর্তনগুলি শনাক্ত করা। ফাইল সিস্টেম মনিটরিংয়ের মাধ্যমে আপনি সিস্টেমে অবাঞ্ছিত বা সন্দেহজনক কার্যকলাপ সহজেই চিহ্নিত করতে পারেন।
৩. ডেটা ব্যাকআপ বা সিঙ্ক্রোনাইজেশন
ফাইল সিস্টেম মনিটরিং অনেক সময় ব্যাকআপ অথবা সিঙ্ক্রোনাইজেশন অ্যাপ্লিকেশনের জন্য ব্যবহার করা হয়। যেমন, যখন একটি ফাইল পরিবর্তন হয় বা নতুন ফাইল যুক্ত হয়, তখন সেই পরিবর্তনগুলিকে সার্ভারে আপলোড বা ব্যাকআপ করার জন্য ব্যবহার করা যায়।
৪. কনফিগারেশন পরিবর্তন ট্র্যাক করা
অনেক অ্যাপ্লিকেশন বা সিস্টেমের কনফিগারেশন ফাইল থাকে, যেগুলি পরিবর্তন হলে সেই পরিবর্তনগুলির প্রতি সাড়া দেওয়া প্রয়োজন। WatchService ব্যবহার করে আপনি এই ধরনের ফাইলের পরিবর্তন দ্রুত শনাক্ত করতে পারেন।
WatchService Java NIO এর একটি অত্যন্ত কার্যকরী উপাদান যা ফাইল সিস্টেমে সিস্টেম পর্যবেক্ষণ বা File System Monitoring করতে ব্যবহৃত হয়। এটি একাধিক ইভেন্ট, যেমন ফাইল তৈরি, মুছে ফেলা, বা পরিবর্তন ট্র্যাক করতে সক্ষম, এবং আপনি সেগুলির উপর সাড়া দিতে পারেন। এই সুবিধা Java অ্যাপ্লিকেশনগুলির মধ্যে ফাইল সিস্টেমে স্বয়ংক্রিয় পরিবর্তন ট্র্যাক করার জন্য অত্যন্ত কার্যকরী, যেমন ব্যাকআপ, নিরাপত্তা মনিটরিং এবং কনফিগারেশন ট্র্যাকিংয়ের জন্য ব্যবহৃত হয়।
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 কার্যক্রম আরো দক্ষভাবে পরিচালনা করতে পারেন, এবং এটি ফাইল সিস্টেমের পর্যবেক্ষণে সময় ও রিসোর্স ব্যবস্থাপনায় কার্যকরী সমাধান প্রদান করে।
Java NIO (New I/O) এর মধ্যে WatchService API একটি গুরুত্বপূর্ণ ফিচার যা ডিরেক্টরি এবং ফাইলের events (যেমন, CREATE, MODIFY, DELETE) মনিটর করতে ব্যবহৃত হয়। এই API ব্যবহার করে আপনি একটি ডিরেক্টরি বা ফাইল সিস্টেমের পরিবর্তনগুলো ট্র্যাক করতে পারেন এবং সেগুলির উপর বিভিন্ন কার্যক্রম পরিচালনা করতে পারেন। এটি সাধারণত ফাইল সিস্টেমে পরিবর্তন সনাক্ত করার জন্য ব্যবহৃত হয়, যেমন একটি ফাইল তৈরি, পরিবর্তিত বা মুছে ফেলা হলে তা স্বয়ংক্রিয়ভাবে ধরা যায়।
এই টিউটোরিয়ালে আমরা দেখব কিভাবে WatchService API ব্যবহার করে ফাইল সিস্টেমের ইভেন্ট (CREATE, MODIFY, DELETE) মনিটর করা যায়।
WatchService API এর ধারণা
WatchService হল Java NIO এর একটি API যা আপনাকে নির্দিষ্ট ডিরেক্টরি বা ফাইল সিস্টেমের উপর নজর রাখতে সহায়ক। আপনি একটি ডিরেক্টরি রেজিস্টার করতে পারেন, এবং যখন সেখানে কোনো পরিবর্তন হবে, তখন আপনি সেই পরিবর্তনটি WatchKey এর মাধ্যমে সনাক্ত করতে পারবেন।
মূল ধাপ:
- WatchService তৈরি করা: একটি
WatchServiceঅবজেক্ট তৈরি করা হয়। - WatchKey তৈরি করা: একটি ডিরেক্টরি বা ফাইল সিস্টেমকে
WatchServiceএর সাথে রেজিস্টার করা হয় এবং এর সাথে ইভেন্ট (CREATE, MODIFY, DELETE) রেজিস্টার করা হয়। - Events মনিটর করা:
watchKey.poll()অথবাwatchKey.take()ব্যবহার করে আপনি মনিটর করা ডিরেক্টরির পরিবর্তন ট্র্যাক করতে পারেন।
WatchService API ব্যবহার করে File এবং Directory Events Monitor করা
উদাহরণ: একটি ডিরেক্টরি মনিটর করা (CREATE, MODIFY, DELETE)
এই উদাহরণে, আমরা দেখব কিভাবে একটি ডিরেক্টরি মনিটর করা যায় এবং ফাইলের পরিবর্তন (CREATE, MODIFY, DELETE) ধরা যায়।
import java.nio.file.*;
import java.nio.file.attribute.*;
import java.util.*;
public class FileWatcherExample {
public static void main(String[] args) throws Exception {
// WatchService তৈরি করা
WatchService watchService = FileSystems.getDefault().newWatchService();
// ডিরেক্টরি পাথ সেট করা (আপনার পছন্দের পাথ দিন)
Path path = Paths.get("C:/temp"); // মনিটর করতে চাওয়া ডিরেক্টরি
path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE,
StandardWatchEventKinds.ENTRY_MODIFY,
StandardWatchEventKinds.ENTRY_DELETE);
System.out.println("Monitoring directory: " + path.toString());
// ইভেন্টগুলোর জন্য মনিটর করা
while (true) {
WatchKey key;
try {
key = watchService.take(); // এই মেথডটি ব্লক হবে যতক্ষণ না কোনো ইভেন্ট ঘটবে
} catch (InterruptedException e) {
System.out.println("Interrupted");
return;
}
// WatchKey থেকে ইভেন্টগুলি প্রক্রিয়া করা
for (WatchEvent<?> event : key.pollEvents()) {
WatchEvent.Kind<?> kind = event.kind();
// ফাইলের সাথে সম্পর্কিত ইভেন্ট
Path filename = (Path) event.context();
if (kind == StandardWatchEventKinds.ENTRY_CREATE) {
System.out.println("File created: " + filename);
} else if (kind == StandardWatchEventKinds.ENTRY_MODIFY) {
System.out.println("File modified: " + filename);
} else if (kind == StandardWatchEventKinds.ENTRY_DELETE) {
System.out.println("File deleted: " + filename);
}
}
// WatchKey রিসেট করা
boolean valid = key.reset();
if (!valid) {
break; // যদি ডিরেক্টরি অন্যথায় বন্ধ হয়ে যায়
}
}
}
}
কোড বিশ্লেষণ:
- WatchService তৈরি:
FileSystems.getDefault().newWatchService()ব্যবহার করে একটিWatchServiceতৈরি করা হয় যা ডিরেক্টরির ইভেন্ট মনিটর করবে। - ডিরেক্টরি রেজিস্টার করা:
path.register()মেথড ব্যবহার করে ডিরেক্টরি রেজিস্টার করা হয় এবং এখানে তিনটি ইভেন্ট রেজিস্টার করা হয়েছে: ENTRY_CREATE, ENTRY_MODIFY, এবং ENTRY_DELETE। - ইভেন্ট মনিটর করা:
watchService.take()মেথড দিয়ে ব্লকিং স্টাইলে ডিরেক্টরি মনিটর করা হচ্ছে এবং যখন কোনো পরিবর্তন ঘটে, তখন সেই পরিবর্তনটি WatchKey এর মাধ্যমে সনাক্ত করা হয়। - ইভেন্ট প্রসেস করা:
key.pollEvents()ব্যবহার করে ইভেন্টগুলো প্রসেস করা হয়, যেমন ফাইল তৈরি, পরিবর্তিত বা মুছে ফেলা।
WatchService এর প্রয়োজনীয়তা
১. ফাইল সিস্টেম মনিটরিং:
WatchService একটি অত্যন্ত কার্যকরী উপকরণ যা ফাইল সিস্টেমের উপর নজর রাখতে সাহায্য করে। এটি ডিরেক্টরি এবং ফাইলের ইভেন্ট যেমন ফাইল তৈরি, পরিবর্তন বা মুছে ফেলা ইত্যাদি সনাক্ত করতে সক্ষম।
২. অটোমেটেড সিস্টেম:
আপনি যখন একটি সিস্টেমে file monitoring সিস্টেম তৈরি করতে চান, তখন WatchService এর সাহায্যে আপনি বিভিন্ন ফাইল ইভেন্ট ট্র্যাক করতে পারেন। এটি স্বয়ংক্রিয়ভাবে ফাইল পরিবর্তন পরিচালনার জন্য উপযোগী, যেমন ফাইল ব্যাকআপ, ফাইল সেন্সিং বা লগ ফাইল সিস্টেম।
৩. রিয়েল-টাইম ইভেন্ট প্রক্রিয়া:
ফাইল সিস্টেমে পরিবর্তন সনাক্ত করার জন্য WatchService ব্যবহার করা হয়, যেখানে রিয়েল-টাইম ফাইল পরিবর্তন বা ডেটা আপডেট করার জন্য সহজেই ইভেন্ট হ্যান্ডলিং করতে পারেন।
৪. কমপ্লেক্স ফাইল সিস্টেম অপারেশন:
কোনো ফাইল সিস্টেমে অনেক ডিরেক্টরি বা ফাইল থাকলে, WatchService তার সমস্ত পরিবর্তন মনিটর করতে পারে এবং প্রয়োজনীয় কাজগুলো কার্যকরীভাবে করতে পারে। এটি বিশেষভাবে ফাইল সিঙ্ক্রোনাইজেশন এবং আর্কাইভিংয়ের জন্য উপকারী।
WatchService এর সীমাবদ্ধতা
- একক ডিরেক্টরি মনিটরিং: WatchService শুধুমাত্র এক ডিরেক্টরির জন্য কাজ করে, যদি আপনি একটি সমগ্র ফাইল সিস্টেম মনিটর করতে চান তবে আপনাকে একাধিক
WatchServiceব্যবহার করতে হবে। - ব্যাচ ডেটা: কিছু ক্ষেত্রে WatchService একসাথে একাধিক ইভেন্ট পরিচালনা করতে পারে না এবং আপনাকে প্রতিটি ইভেন্টের জন্য পৃথকভাবে কাজ করতে হতে পারে।
- ফাইল সিস্টেমের সীমাবদ্ধতা: সব ধরনের ফাইল সিস্টেমে এটি সমানভাবে কাজ নাও করতে পারে, যেমন কিছু নেটওয়ার্ক ফাইল সিস্টেমে WatchService ঠিকমত কাজ নাও করতে পারে।
WatchService Java NIO এর একটি অত্যন্ত কার্যকরী উপাদান যা ফাইল সিস্টেমের ইভেন্ট যেমন ফাইল তৈরি, পরিবর্তন বা মুছে ফেলা মনিটর করতে ব্যবহৃত হয়। এটি খুবই কার্যকরী যখন আপনি একটি ডিরেক্টরি বা ফাইল সিস্টেমের ওপর নজর রাখতে চান এবং সেখানে ঘটিত পরিবর্তনগুলো দ্রুত সনাক্ত করতে চান। WatchService ব্যবহারে আপনি ফাইল সিস্টেমের যেকোনো পরিবর্তন সহজেই ট্র্যাক করতে পারবেন, যা আপনাকে স্বয়ংক্রিয় ফাইল সিঙ্ক্রোনাইজেশন, ব্যাকআপ, এবং ডেটা মনিটরিং করতে সহায়ক।
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