June 2, 2012

WatchService

ကျွှန်တော်သည် Java 7 အကြောင်းကို လေ့လာရင်း Nio2 ကြောင်းကိုရေးသားလာခဲ့ပါသည်။ Nio 2 သည် ယခင် Java IO စစ္စတမ်၏ အားနည်းချက်များကို ဖြည့်စွက်ထားသော API တစ်ခုဖြစ်ပါသည်။ Java 7 ကို အသုံးများသည့်အခါတွင် NIO2 ကို အသုံးပြုလာမည်မှာ မလွဲပေ။ ဤတစ်ခေါက်တွင် Nio2 File System ၏ နောက်ဆုံးအကြိမ်အဖြစ် WatchService အင်တာဖေစ် အကြောင်းကို ရေးသားသွားပါဦးမည်။


ဒိုင်အတ္တရီများအား စောင့်ကြည့်ခြင်း


ဒိုင်အတ္တရီ တစ်ခု အတွင်းတွင် ဖိုင်နှင့်ဒိုင်အတ္တရီများအား အသစ်ပြုလုပ်ခြင်း၊ ပြောင်းလည်းခြင်း၊ ဖျက်ပစ်ခြင်းများပြုလုပ်ပါက ထိုအကြောင်းကို သိရှိရန်မှာ အကြိမ်ကြိမ် ဒိုင်အတ္တရီအား သွားသွားကြည့်ရန် လိုအပ်ခဲ့ပါသည်။ သို့ရာတွင် Java7 ၏ nio2 ၌ သတ်မှတ်ထားသော ဒိုင်အတ္တရီတစ်ခုအား စောင့်ကြည့်နိုင်သော WatchService အင်တာဖေစ်ကို ပံ့ပိုးလာခဲ့ပါသည်။ WatchService အင်တာဖေစ်ကို အသုံးပြုခြင်းအားဖြင့် စောင့်ကြည့်နေသော ဒိုင်အတ္တရီ အတွင်းတွင် ပြောင်းလည်းမှု့များကို ပြုလုပ်ပါက အကြိမ်ကြိမ် သွားကြည့်စရာမလိုပဲ သိရှိနိုင်ပါသည်။
   Path path = fs.getPath("alpha");
   WatchService watcher = fs.newWatchService();

   path.register(watcher, StandardWatchEventKinds.ENTRY_CREATE,
     StandardWatchEventKinds.ENTRY_DELETE,
     StandardWatchEventKinds.ENTRY_MODIFY);
အထက်ပါအတိုင်း FileSystem#newWatchService လုပ်ဆောင်ချက်ဖြင့် WatchService ၏ အင်းစတန့်စ်ကို ရယူနိုင်ပါသည်။ ပြီးပါက စောင့်ကြည့်လိုသော ဒိုင်အတ္တရီ၏ Path အော့ဘဂျက်တွင် WatchService အင်းစတန့်စ်အား Register လုပ်လိုက်ရုံသာဖြစ်၏။

Path#register လုပ်ဆောင်ချက်၏ ပဋ္ဌမ ပါရာမီတာသည် Path အား စောင့်ကြည့်မည့် WatchService အော့ဘဂျက်ဖြစ်ပြီး၊ အနောက်တွင် စောင့်ကြည့်မည့် Event များကို သတ်မှတ်ရေးသားရန် လိုအပ်ပါသည်။ ဤနမှုနာထဲတွင် ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY တို့ကို ရေးသားထားပါသဖြင့်၊ အသစ်တည်ဆောက်သည့်အခါ၊ ဖျက်စီးသည့်အခါနှင့် ပြုပြင်ပြောင်းလည်းသည့်အခါများအား စောင့်ကြည့်နိုင်ပါသည်။

စောင့်ကြည့်ပုံ
   while(true) {
    WatchKey key = null;
    try {
     key = watcher.take();
    } catch (InterruptedException e) {
     break;
    }
    
    for(WatchEvent<?> event : key.pollEvents()) {
     if(event.kind() == StandardWatchEventKinds.OVERFLOW) {
      continue;
     } else {
      System.out.println(event.kind() + " : " + event.context());
     }
    }
    
    if(!key.reset()) {
     break;
    }
   }
စောင့်ကြည့်နေသော ဒိုင်အတ္တရီများအတွင်းတွင် ပြောင်းလည်းမှု့များဖြစ်ပေါ်လာပါက java.nio.file.WatchKey အင်တာဖေစ်မှ တဆင့်သိရှိနိုင်ပါသည်။ java.nio.file.WatchKey သည် WatchService#take လုပ်ဆောင်ချက် ဒါမှမဟုတ် WatchService#pool လုပ်ဆောင်ချက်မှ တဆင့်ခေါ်ယူနိုင်ပါသည်။ တဖန် ဖြစ်ပေါ်လာသော Event များအားjava.nio.file.WatchEvent အင်တာဖေစ်မှတဆင့် သိရှိနိုင်ပါသည်။

ကျွှန်တော်တို့ ရေးသားထားသော ပရိုဂရမ်အား ကွန်ပိုင်းလုပ်၍ စမ်းသပ်ကြည့်ပါမည်။


စောင့်ကြည့်နေသော ဒိုင်အတ္တရီအတွင်းတွင် ဖိုင်အသစ်အား တည်ဆောက်ကြည့်သောအခါ၊ ENTRY_CREATE Event ကို ဖြစ်ပေါ်စေသည်ကိုတွေ့ရပါသည်။ တဖန် ထိုဖိုင်အား Hello.txt ဟု အမည်ပြောင်းလိုက်သောအခါ၊ ENTRY_DELETE နှင့် ENTRY_MODIFY ကို ဖြစ်ပေါ်စေပြီး၊ Hello.txt အတွင်းတွင် စာရိုက်ပြီး၊ save လုပ်လိုက်သောအခါ ENTRY_MODIFY ကို ဖြစ်ပေါ်စေသည်ကို တွေ့ရပါသည်။

ရေးသားထားသော နမှုနာကုဒ်များအား ဤနေရာတွင် ရယူနိုင်ပါသည်။


ဆက်ပါဦးမည်။ လေးစားစွာဖြင့်။
မင်းလွင်

No comments:

Post a Comment