Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發之資源文件存儲

Android開發之資源文件存儲

編輯:關於Android編程

在Android開發中關於資源文件的存儲操作。     在android開發中,資源文件是我們使用頻率最高的,無論是string,drawable,還是layout,這些資源都是我們經常使用到的,而且為我們的開始提供很多方便,不過我們平時接觸的資源目錄一般都是下面這三個。   /res/drawable  /res/values  /res/layout     除些之外,Android資源文件還有以下三種會經常使用到:   /res/xml     /res/raw   /assets       首先是/res/xml ,這個目錄中大家可能偶爾用到過,這裡可以用來存儲xml格式的文件,並且和其他資源文件一樣,這裡的資源是會被編譯成二進制格式放到最終的安裝包裡的,我們也可以通過R類來訪問這裡的文件,並且解析裡面的內容。        例如我們在這裡存放了一個名為file.xml的文件:     <?xml version="1.0" encoding="utf-8"?>  <book> <title>XML高級編程</< span>title> </< span>book>         隨後,我們就可以通過資源ID來訪問並解析這個文件了,如下代碼所示:           XmlResourceParser xml = getResources().getXml(R.xml.file);      xml.next();     int eventType = xml.getEventType();     boolean inTitle = false;     while(eventType != XmlPullParser.END_DOCUMENT) {                          //到達title節點時標記一下             if(eventType == XmlPullParser.START_TAG) {                     if(xml.getName().equals("title")) {                             inTitle = true;                     }             }                          //如過到達標記的節點則取出內容             if(eventType == XmlPullParser.TEXT && inTitle) {                     ((TextView)findViewById(R.id.txXml)).setText(                                     xml.getText()                     );             }                          xml.next();             eventType = xml.getEventType();     }     在這裡,我們用資源類的getXml方法,返回了一個xml解析器,這個解析器的工作原理和SAX方式差不多。   要注意的是,這裡的xml文件,最終是會被編譯成二進制形式的,如果大家想讓文件原樣存儲的話,那麼就要用到下一個目錄啦,那就是/res/raw目錄這個目錄的唯一區別就是,這裡的文件會原封不動的存儲到設備上,不會被編譯為二進制形式,訪問的方式也是通過R類,下面是代碼示例:         ((TextView)findViewById(R.id.txRaw)).setText(readStream(getResources().openRawResource(R.raw.rawtext)));              private String readStream(InputStream is) {                           try {                   ByteArrayOutputStream bo = new ByteArrayOutputStream();                   int i = is.read();                   while(i != -1) {                          bo.write(i);                          i = is.read();                   }                                            return bo.toString();           } catch (IOException e) {                   return "";           }     }     這次使用資源類中的方法,openRawResource,返回給我們一個輸入流,這樣我們就可以任意讀取文件中的內容了,例如上面例子中那樣,原樣輸出文本文件中的內容。                    當然,如果你需要更高的自由度,盡量不受android平台的約束,那麼/assets這個目錄就是我們的首選了。             這個目錄中的文件除了不會被編譯成二進制形式之外,另外一點就是,訪問方式是通過文件名,而不是資源ID。並且還有更重要的一點就是,大家可以在這裡任意的建立子目錄,而/res目錄中的資源文件是不能自行建立子目錄的。如果需要這種靈活的資源存儲方式,那麼就看看下面這個例子:         AssetManager assets = getAssets();        ((TextView)findViewById(R.id.txAssets)).setText(readStream(assets.open("data.txt")));       在context上下文中,調用getAssets返回一個AssetManager,然後使用open方法就可以訪問需要的資源了,這裡open方法是以assets目錄為根的。所以上面這段代碼訪問的是assets目錄中名為data.txt的資源文件。       Android文件資源(raw/data/asset)的存取代碼如下:    一、私有文件夾下的文件存取(/data/data/包名)            import java.io.FileInputStream;        import java.io.FileOutputStream;       import org.apache.http.util.EncodingUtils;              public void writeFileData(String fileName,String message){           try{            FileOutputStream fout = openFileOutput(fileName, MODE_PRIVATE);            byte [] bytes = message.getBytes();            fout.write(bytes);             fout.close();            }           catch(Exception e){            e.printStackTrace();           }       }                        public String readFileData(String fileName){            String res="";            try{             FileInputStream fin = openFileInput(fileName);             int length = fin.available();             byte [] buffer = new byte[length];             fin.read(buffer);                 res = EncodingUtils.getString(buffer, "UTF-8");             fin.close();                }            catch(Exception e){             e.printStackTrace();            }            return res;           }         二、從resource中的raw文件夾中獲取文件並讀取數據(資源文件只能讀不能寫)          public String getFromRaw(String fileName){           String res = "";          try{           InputStream in = getResources().openRawResource(R.raw.test1);            int length = in.available();                 byte [] buffer = new byte[length];                  in.read(buffer);                   res = EncodingUtils.getString(buffer, "UTF-8");              in.close();                     }          catch(Exception e){           e.printStackTrace();                  }       return res ;      }       三、從asset中獲取文件並讀取數據(資源文件只能讀不能寫)         public String getFromAsset(String fileName){        String res="";       try{        InputStream in = getResources().getAssets().open(fileName);          int length = in.available();                   byte [] buffer = new byte[length];                  in.read(buffer);                      res = EncodingUtils.getString(buffer, "UTF-8");           }       catch(Exception e){        e.printStackTrace();               }       return res;   }     關於Android獲取assets的絕對路徑有如下方法:   第一種方法:     String path = "file:///android_asset/文件名";   第二種方法:   InputStream abpath = getClass().getResourceAsStream("/assets/文件名");       若要想要轉換成String類型,則使用下列代碼:           String path = new String(InputStreamToByte(abpath ));       private byte[] InputStreamToByte(InputStream is) throws IOException {         ByteArrayOutputStream bytestream = new ByteArrayOutputStream();         int ch;           while ((ch = is.read()) != -1) {             bytestream.write(ch);         }           byte imgdata[] = bytestream.toByteArray();         bytestream.close();         return imgdata;     }       
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved