May 13, 2012

Meta Data

ဖိုင်တစ်ခုသည် ကွန်ပျူတာပေါ်တွင် အချက်အလက် (Data) များကို သိမ်းဆည်းထားသော အရာဖြစ်ပြီး၊ ထိုဖိုင်သည် မည်သည့်ဖိုင်ဖြစ်သည်၊ ပမာဏသည် မည်မျှဖြစ်သည်၊ မည်သည့်အချိန်က စတင်ဖွဲ့စည်း တည်ဆောက်ခဲ့သည် အစရှိသည့်၊ ထိုဖိုင်၏ ပိုင်ဆိုင်မှု့အကြောင်းအရာများအား ဖော်ပြရန် သိမ်းဆည်းထားသော အချက်အလက်များအား Meta Data ဟု ခေါ်ပါသည်။

Java ၏ Nio2 တွင် ဖိုင်နှင့် ဒိုင်အတ္တရီများ၏ ပိုင်ဆိုင်မှု့ အချက်အလက်များအား ဖော်ပြအသုံးချနိုင်ရန် နည်းလမ်း၂မျိုး ပြင်ဆင်ထားပါသည်။ ပဋ္ဌမဆုံးနည်းလမ်းမှာ Files ကလပ်စ်မှ တဆင့် Meta Data များကို တိုက်ရိုက် ခေါ်ယူအသုံးပြုခြင်း နည်းလမ်းနှင့်၊ နောက်နည်းလမ်းတစ်ခုမှာ java.nio.file.attribute.FileAttributeView အင်တာဖေစ်မှ တဆင့် လိုအပ်သော အချက်အလက်များကို ဆက်သွယ်အသုံးပြုနည်းတို့ ဖြစ်ပါသည်။


Files Class မှ အသုံးပြုနိုင်သော Meta Data များ


Files ကလပ်စ်တွင် Files#getOwner, Files#setOwner အစရှိသည့် ဖိုင်တစ်ခု၏ Meta Data များကို ရယူနိုင်သော၊ ပြောင်းလည်းသတ်မှတ်နိုင်သော လုပ်ဆောင်ချက်များကို ပြင်ဆင်ထားပါသည်။ သို့ရာတွင် Files ကလပ်စ်တွင် ပြင်ဆင်ထားသော လုပ်ဆောင်ချက်မှာ အနည်းစုသာဖြစ်၏။ ဥပမာအားဖြင့် ဖိုင်တစ်ခု၏ နောက်ဆုံးသိမ်းဆည်း ခဲ့သော အချိန်အား ဆက်သွယ် အသုံးပြုနိုင်သော်လည်း၊ ထိုဖိုင်အား စတင် တည်ဆောက် ခဲ့သော အချိန်အား ဆက်သွယ်အသုံးပြုနိုင်ခြင်း မရှိပါ။

FileAttributeSample.java
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.attribute.FileTime;
import java.nio.file.attribute.UserPrincipal;


public class FileAttributeSample {

    public static void main(String[] args) {
        try {
            showAttributeInfo(FileSystems.getDefault().getPath(args[0]));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void showAttributeInfo(Path path) throws IOException {
        // File Owner
        UserPrincipal user = Files.getOwner(path);
        System.out.println("File Owner : " + user);
        
        // Last Update Time
        FileTime lstUpdTime = Files.getLastModifiedTime(path);
        System.out.println("Last Update Time : " + lstUpdTime);
        
        // Is writable
        boolean isWritable = Files.isWritable(path);
        System.out.println("Is Writable File : " + isWritable);
        
        // Creation Time
        FileTime creationTime = (FileTime)Files.getAttribute(path, "creationTime");
        System.out.println("File Creation Time : " + creationTime);
    }
}

အထက်ပါ နမှုနာတွင် ဖော်ပြထားသည့်အတိုင်း Files#getOwner ဖြင့်၊ UserPrincipal အင်တာဖေစ်၏ Objectကို ရရှိနိုင်ပါသည်။ ထို Object မှတဆင့် ဖိုင် ပိုင်ရှင်ကို သိရှိနိုင်ပါသည်။ တဖန် Files#getLastModifiedTime ဖြင့် နောက်ဆုံးပြုပြင်ခဲ့သည့် အချိန်ကို သိရှိနိုင်ပါသည်။ Files#getAttribute ကို အသုံးပြုပါက ထိုဖိုင်တွင် ပိုင်ဆိုင်သော အချက်အလက်များကို သိရှိနိုင်ပါသည်။

ဖိုင်အားပြုလုပ်ခဲ့သည့် အချိန်ကို သိရှိလိုပါက ပါရာမီတာ "creationTime" ကို အသုံးပြုပါက ရရှိနိုင်ပါသည်။ ဖိုင်အားစတင်ရေးသားခဲ့သည့် အချိန်မှာ FileTime အင်တာဖေစ်၏ Object အဖြစ် အသုံးပြုပါသဖြင့် FileTime ဖြင့် cast လုပ်နေသည်ကို တွေ့ရပါမည်။




FileAttributeView အင်တာဖေစ်ဖြင့် Meta Data များကို အသုံးပြုခြင်း


Files#getAttribute နှင့် Files#setAttribute ကို အသုံးပြုခြင်းအားဖြင့် Meta Data များကို နှစ်သက်သလို အသုံးပြုနိုင်ပါသည်။ သို့ရာတွင် Attribute ၏ အမည်များကို သိရှိရန် လိုအပ်ပါသည်။ ထို့အပြင် မှန်ကန်စွာ Cast လုပ်ရန် လိုအပ်ပါသည်။ ထိုအားနည်းချက်များအား ပြုပြင်ရန် ပြင်ဆင်ထားသည်က FileAttributeView အင်တာဖေစ် ဖြစ်ပါသည်။

ဖိုင်တစ်ခု၏ Meta Data များသည် အသုံးပြုနေသည့် File System အပေါ်တွင် မှုတည်၍ ပြောင်းလည်း တတ်ပါသည်။ ထို့ကြောင့် Windows နှင့် Linux တို့တွင် အသုံးပြုနိုင်သော Meta Data များမှာ မတူညီကြပေ။ ဤကဲ့သို့ မတူညီသော FileAttribute များကို အသုံးပြုနိုင်ရန်အတွက် FileAttributeView ၏ Sub Interface များကို ပြင်ဆင်ထားပါသည်။

BasicFileAttributeView သည် Linux ရော Windows မှာပါ အသုံးပြုနိုင်သော Meta Data များကို စုစည်းထားသော အင်တာဖေစ်ဖြစ်ပြီး၊ DosFileAttributeView သည် Windows သုံး အင်တာဖေစ် ဖြစ်၏။ PosixFileAttributeView မှာမူ Linux သုံး အင်တာဖေစ် ဖြစ်ပါသည်။ တဖန် ACL ကို အသုံးပြုနိုင်သော AclFileAttributeView နှင့် Owner အချက်အလက်များကို အသုံးပြုနိုင်သော FileOwnerAttributeView အင်တာဖေစ် များကိုလည်း nio2 တွင် ပြင်ဆင်ထားပါသည်။

BasicFileAttributeView ကို လက်တွေ့ ရေးသားကြည့်ပါမည်။

import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.attribute.BasicFileAttributeView;
import java.nio.file.attribute.BasicFileAttributes;
import java.nio.file.attribute.FileTime;

public class FileAttributeViewSample {

    public static void main(String[] args) {
        try {
            showAttributeInfo(FileSystems.getDefault().getPath(args[0]));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void showAttributeInfo(Path path) throws IOException {

        BasicFileAttributeView bfw = Files.getFileAttributeView(path,
                BasicFileAttributeView.class);
        BasicFileAttributes bfs = bfw.readAttributes();

        // Last Update Time
        FileTime lstUpdTime = bfs.lastModifiedTime();
        System.out.println("Last Update Time : " + lstUpdTime);

        // Creation Time
        FileTime creationTime = bfs.creationTime();
        System.out.println("Creation Time : " + creationTime);
    }
}

BasicFileAttributeView Object အား Files#getAttributeView ဖြင့် ခေါ်ယူ အသုံးပြုနိုင်ပါသည်။ getAttributeView လုပ်ဆောင်ချက်၏ ဒုတိယ ပါရာမီတာတွင် အသုံးပြုလိုသည့် FileAttributeView ကလပ်စ် ကို ရေးသားပါက၊ အသုံးပြုလိုသည့် FileAttributeView Object ကို ရယူနိုင်ပါသည်။

တဖန် BasicFileAttributeView#readAttributes ဖြင့် ဖိုင်၏ Meta Data များကို အသုံးပြုနိုင်သော BasicFileAttribute Object ကို ရရှိနိုင်ပါသည်။

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




ကိုးကား
http://itpro.nikkeibp.co.jp/article/COLUMN/20110830/367909/?ST=develop&mkjt&P=5


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

No comments:

Post a Comment