<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Fang.W
    我也是江湖中人,但沒(méi)有武功,比的是技術(shù)!——21世紀(jì)的江湖人

     

    一、是否能夠讀寫(xiě)
    想要自己編寫(xiě)的程序能夠讀寫(xiě)文件(注意這里所說(shuō)的文件不是指jar包中的文件,是指比如手機(jī)內(nèi)存或卡中的文件),
    首先要確認(rèn)程序?qū)⒁惭b的手機(jī)是否支持 JSR75 ;其次還要知道該手機(jī)是否允許未簽名的程序訪問(wèn)內(nèi)部文件系統(tǒng)。如果
    其中有一個(gè)條件不能滿(mǎn)足,那么程序就無(wú)法實(shí)現(xiàn)出文件的讀寫(xiě)功能了。
    在對(duì)文件系統(tǒng)的操作方面,J2ME提供的功能是很有限的,之所以有這么多的限制,是為了安全著想。J2ME在設(shè)計(jì)之初
    就是為了安全方便的實(shí)現(xiàn)有限功能而設(shè)計(jì)的。所以即便有很多的限制,它的易用性,是很多人傾心于使用它。
    前面說(shuō)到了一個(gè)軟件“簽名”的問(wèn)題,其實(shí)是一個(gè)“授權(quán)”的問(wèn)題。即:在手機(jī)中運(yùn)行的程序是有很多的限制的,如是
    否有訪問(wèn)網(wǎng)絡(luò)的權(quán)限,是否能夠訪問(wèn)文件系統(tǒng)等。如果某軟件得到了手機(jī)開(kāi)發(fā)商/運(yùn)營(yíng)商的簽名授權(quán),則可以得到很多權(quán)限。
    授權(quán)的證書(shū)有3個(gè)域,不同的域有不同的權(quán)限。但是有些手機(jī)是可以自己設(shè)置軟件的權(quán)限的,比如我的索愛(ài)手機(jī)就可以設(shè)置有
    關(guān)訪問(wèn)網(wǎng)絡(luò)及文件系統(tǒng)的權(quán)限。

    二、JSR75 介紹
    關(guān)于 JSR75 方面的詳細(xì)內(nèi)容,你可以去看看 SonyEricsson/Nokia/MOTO 提供的開(kāi)發(fā)包中的幫助文檔,這些幫助文檔中
    都有介紹這個(gè)包。
    JSR75 是為了實(shí)現(xiàn)對(duì)文件系統(tǒng)的操作功能,另外設(shè)計(jì)的,是一個(gè)擴(kuò)展包。在 MIDP API 中是沒(méi)有關(guān)于文件讀寫(xiě)方面的方法
    的。所以在安裝程序之前要確認(rèn)手機(jī)是否支持該包。
    來(lái)看看JSR75中有那些內(nèi)容:
    (1)FC API
    javax.microedition.io.file —— 提供對(duì)本地文件系統(tǒng)的訪問(wèn)功能
          ConnectionClosedException —— 當(dāng)試圖對(duì)一個(gè)已經(jīng)關(guān)閉的 FileConnection 對(duì)象進(jìn)行操作時(shí),會(huì)拋出此異常。
          FileConnection —— 這是一個(gè)很關(guān)鍵的類(lèi),基本上文件讀寫(xiě)都是有該類(lèi)完成。可以從字面上去理解它的意思。
          FileSystemEventHandler —— 這個(gè)類(lèi)我也沒(méi)用過(guò),不知道它具體的功能。
          FileSystemListener —— 用于監(jiān)聽(tīng)文件系統(tǒng)目錄狀態(tài)的變化,比如文件的刪除、新增,存儲(chǔ)卡的拔出和插入等。
          FileSystemRegistry —— 用于管理和跟蹤文件系統(tǒng)的監(jiān)聽(tīng)器,以及可以通過(guò)此類(lèi)過(guò)去當(dāng)前所有文件系統(tǒng)的根目錄。
          IllegalModeException —— 文件打開(kāi)模式異常,當(dāng)試圖寫(xiě)入以只讀方式打開(kāi)的文件時(shí),會(huì)拋出該異常。
    (2)PIM API
    javax.microedition.io.pim —— 提供對(duì)個(gè)人信息數(shù)據(jù)的訪問(wèn),一般包括名片夾、日歷項(xiàng)和待辦事項(xiàng)。
          此包這次暫不介紹,自己還沒(méi)有用過(guò)。

    三、根據(jù)程序詳細(xì)介紹有關(guān)文件系統(tǒng)的操作
    1)驗(yàn)證手機(jī)系統(tǒng)是否支持FC API
    我們可以通過(guò)系統(tǒng)屬性來(lái)驗(yàn)證手機(jī)是否支持 FC API:

     public void canfileControl() {
      
    /**
       * 判斷系統(tǒng)是否支持FC
       
    */

      String version 
    = System.getProperty("microedition.io.file.FileConnection.version");
      
      
    if (version == null
       System.out.println(
    "cannot control fileSystem!"); 
       
    return;
      }
     else {
       System.out.println(
    "version: " + version);
      }

      
      
    /**
       * 獲取文件系統(tǒng)的所有根目錄
       * 索愛(ài)的機(jī)型,所有的根目錄是: 
       *    e:/
       *    c:/
       *     root1/
       
    */

      Enumeration emun 
    = FileSystemRegistry.listRoots();
      String tmp 
    = "";
      
    while (emun.hasMoreElements()) 
       tmp 
    = emun.nextElement().toString();
       System.out.println(
    "root: " + tmp);
      }

     }


     這方法也是在網(wǎng)上看到的,我試過(guò)。但是對(duì)于Nokia的機(jī)型好像不行,即使Nokia支持該類(lèi),返回的仍然是null值。我認(rèn)為可能是key不同。請(qǐng)高人指導(dǎo)。

    2)實(shí)現(xiàn) “文件夾創(chuàng)建/文件創(chuàng)建/文件寫(xiě)入/文件讀取”功能
    注意,當(dāng)我們要進(jìn)入文件系統(tǒng),對(duì)它進(jìn)行操作時(shí),系統(tǒng)會(huì)中斷操作,詢(xún)問(wèn)用戶(hù)是否要對(duì)文件系統(tǒng)進(jìn)行操作。所以我們必須使用一個(gè)線程,來(lái)進(jìn)行文件系統(tǒng)的操作。
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.Enumeration;

    import javax.microedition.io.Connector;
    import javax.microedition.io.file.FileConnection;
    import javax.microedition.io.file.FileSystemRegistry;
    import javax.microedition.lcdui.ChoiceGroup;
    import javax.microedition.lcdui.List;
    import javax.microedition.lcdui.TextBox;
    import javax.microedition.lcdui.TextField;

    public class FileControl extends Thread implements Runnable {

     
    public void control1() {

      FileConnection fc 
    = null;
      Enumeration enums 
    = null;
      String str 
    = "";
      List list;

      
    try {
       
    /**
        * 打開(kāi)一個(gè) 文件/文件夾 ,可以以三種方式打開(kāi):READ、READ_WRITE、WRITE。
        * 如果沒(méi)有指定第二個(gè)參數(shù),則默認(rèn)為READ_WRITE方式。
        * 注意文件夾的路徑寫(xiě)法,路徑最后有“/”,則表示打開(kāi)的是文件夾。
        * 文件路徑的寫(xiě)法有很多種,這里的路徑寫(xiě)法適合與索愛(ài)的機(jī)型。
        * 比如: MOTO:file:///e/other/notes
        
    */

       fc 
    = (FileConnection) Connector.open(
         
    "file://localhost/e:/other/notes/", Connector.READ);
       
       
    /**
        * 注意,上面的方法在文件不存在的情況下,仍能執(zhí)行成功,所以我們要用下面的方法
        * 判斷文件是否存在,此函數(shù)要求文件是可讀的,
        * 即文件打開(kāi)方式不能是以 Connector.WRITE 方式打開(kāi)的
        * 否則會(huì)拋出 IllegalModeException 異常
        
    */

       
    if (!fc.exists()) {
        
    /**
         * 如果不存在,就創(chuàng)建一個(gè)文件夾。
         * 注意此函數(shù)要求文件的打開(kāi)方式是可寫(xiě)的,
         * 即用上面的可讀方式,在執(zhí)行到這里會(huì)拋出 IllegalModeException 異常
         * 所以我們應(yīng)該改成Connector.READ_WRITE 方式
         * 也可以用下面的方法:fc.setWritable(true)
         * 但要注意的是,這時(shí)文件就不可讀了,也就是說(shuō)你再使用fc.exists(),會(huì)拋出異常
         * 所以最好的方法是在打開(kāi)時(shí)就設(shè)置為Connector.READ_WRITE 方式
         * 還要注意的是,此方法只能創(chuàng)建一層目錄,即,如果other文件夾也不存在,則創(chuàng)建會(huì)失敗
         * 拋出IO異常。所以該方法執(zhí)行成功的情況是在other文件夾存在的情況下
         
    */

        fc.setWritable(
    true);
        fc.mkdir();
       }
     else {
        
    /**
         * 下面的方法是判斷打開(kāi)的文件是否為文件夾
         
    */

        
    boolean isfolder = fc.isDirectory();
        
    if(!isfolder){
         
    return;
        }

        
        list 
    = new List("list", ChoiceGroup.IMPLICIT);
        
        
    /**
         * 獲取目錄下所有文件,
         * 注意此方法返回的是所有文件的名字。
         * 要求文件的打開(kāi)方式是可讀
         
    */

        enums 
    = fc.list();
        
    while (enums.hasMoreElements()) {
         str 
    = enums.nextElement().toString();
         list.append(str, 
    null);
        }

       }

       fc.close();
      }
     catch (Exception e) {
       System.out.println(
    "get file error!!!!!!");
      }

     }


     
    public void control2() {
      
      FileConnection fc 
    = null;
      TextBox tb;
      
      
    /**
       * 打開(kāi)文件
       
    */

      
    try{
       fc 
    = (FileConnection) Connector.open("file://localhost/e:/other/notes/1.txt", Connector.READ_WRITE);
       
    if(!fc.exists()){
        
    /**
         * 如果文件不存在,創(chuàng)建文件
         * 此方法要求文件的打開(kāi)方式為可寫(xiě)
         
    */

        fc.create();
        
    /**
         * 打開(kāi)輸出流,用于向文件輸出內(nèi)容
         * 要求文件打開(kāi)方式為可寫(xiě)
         
    */

        OutputStream out 
    = fc.openOutputStream();
        
    byte[] b = "contents".getBytes("UTF-8");
        out.write(b);
        out.flush();
        out.close();
       }
    else{
        
    /**
         * 打開(kāi)輸入流,讀取文件中的內(nèi)容
         * 要求文件打開(kāi)方式為可讀
         
    */

        InputStream dis 
    = fc.openInputStream();
        
        
    /**
         * 獲取文件大小
         
    */

        
    int size = (int)fc.fileSize();
        
        
    byte[] bytes = new byte[size];
        dis.read(bytes, 
    0, bytes.length);
        String str 
    = new String(bytes, "UTF-8");
        tb 
    = new TextBox("", str, 200, TextField.ANY);
        dis.close();
       }

       fc.close();
      }
    catch(Exception e){
       System.out.println(
    "get file error!!!!!!");
      }

     }
      
    }


    3)其他方法介紹
    除了上面講的一些方法的用法外,F(xiàn)ileConnection 還有其他很多有用的方法。這里就不介紹了。你可以下載J2ME幫助文檔 ,里面對(duì)每個(gè)方法都有一些介紹。

    結(jié)束語(yǔ)
    關(guān)于文件系統(tǒng)操作方面的內(nèi)容就介紹到這里,還在學(xué)習(xí)當(dāng)中。有重要發(fā)現(xiàn),會(huì)及時(shí)補(bǔ)充。有不正確的地方,請(qǐng)高手指點(diǎn)!

    posted on 2007-08-07 10:28 Fang.W 閱讀(7030) 評(píng)論(4)  編輯  收藏 所屬分類(lèi): J2ME

    FeedBack:
    # re: J2ME程序操作文件系統(tǒng)
    2007-08-07 19:13 | 海邊沫沫
    # re: J2ME程序操作文件系統(tǒng)
    2008-03-23 22:28 | iwinyeah
    實(shí)踐證明,所謂的 String version = System.getProperty("microedition.io.file.FileConnection.version");
    檢測(cè)是多余的!
    原因?
    如果你的手機(jī)不支持FileConnection的話(huà),你就連裝入程序的機(jī)會(huì)都沒(méi)有!會(huì)出錯(cuò):ALERT: Unable to load class javax/microedition/io/file/FileConnection  回復(fù)  更多評(píng)論
      
    # re: J2ME程序操作文件系統(tǒng)
    2008-05-29 14:53 | ejoee
    謝謝!!  回復(fù)  更多評(píng)論
      
    # re: J2ME程序操作文件系統(tǒng)
    2009-02-18 17:46 | meaer
    不錯(cuò),不錯(cuò)!  回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: 黄色成人免费网站| 99视频免费播放| A级毛片成人网站免费看| 99在线免费观看| 久久久99精品免费观看| 亚洲中文无码永久免费| 又黄又爽一线毛片免费观看| 中文亚洲成a人片在线观看| 亚洲高清视频在线观看| 中文有码亚洲制服av片| 一进一出60分钟免费视频| 日韩在线不卡免费视频一区| 97无码免费人妻超级碰碰碰碰| 无码欧精品亚洲日韩一区夜夜嗨 | 亚洲AV永久无码精品放毛片| 免费国产在线精品一区| 无人在线观看免费高清| 女人18毛片水真多免费播放| 中文字幕亚洲第一| 亚洲国色天香视频| 人成午夜免费大片在线观看| 99视频免费观看| 亚洲国产成人五月综合网| 久久亚洲精精品中文字幕| 欧美激情综合亚洲一二区| 免费网站看av片| 成年大片免费视频| 亚洲精品夜夜夜妓女网| 亚洲日韩国产一区二区三区在线| 国产综合免费精品久久久| 在线观看免费大黄网站| 亚洲成在人线av| 在线观看亚洲免费视频| 99re这里有免费视频精品| 免费大学生国产在线观看p| 91亚洲国产在人线播放午夜| 日本高清不卡中文字幕免费 | 久久免费国产视频| 国产一级做a爱免费视频| 337p日本欧洲亚洲大胆色噜噜| 激情吃奶吻胸免费视频xxxx|