Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 讀取工程內資源文件的兩種方法

Android 讀取工程內資源文件的兩種方法

編輯:關於Android編程

 

 

總結:

asset目錄下文件:

稱為原生文件,這類文件在被打包成apk文件時是不會進行壓縮的,不會自動生成R文件的ID

訪問:

獲取路徑: file://android_asset/test.xml

  1. //工程根目錄下的assets文件夾中存放,比如assets/test.xml 這樣我們使用下面的代碼
  2. AssetManager am = this.getResources().getAsset();
  3. //或者AssetManager am = this.getAssets();
  4. InputStream is = am.open(test.xml);

    res目錄下的文件:

    文件會被映射到R.java文件中

    1. //res/raw目錄下存放,比如test.xml一個二進制文件,我們可以讀取可以直接
    2. InputStream is=context.getResources().openRawResource(R.raw.test);

      res/raw和assets的相同點:

      1.兩者目錄下的文件在打包後會原封不動的保存在apk包中,不會被編譯成二進制, 可以把數據庫文件放這裡。

      .res/raw不可以有目錄結構,而assets則可以有目錄結構,也就是assets目錄下可以再建立文件夾

      -----------------------------------------------------------------------------------

      在很多時候,我們需要訪問android中的資源文件,這些資源文件主要分為兩類,一種出於asset目錄下,稱為原生文件,這類文件在被打包成apk文件時是不會進行壓縮的;另一類則是res下的文件,這類文件在打包成apk文件時,會進行小內存優化的哦。

      兩種不同類型的文件,對應著不同的訪問模式。我們先來看看asset文件的訪問:

      android中有一個專門的類來處理應用對asset文件的訪問,這個類就是AssetManager。其內有一個open()方法可以根據用戶提供的文件名,返回一個InputStream對象供用戶使用。

       

      這裡我們可以看到open方法以及其他的相應方法,對於其中有一個參數accessMode,則指定了系統獲取資源的模式。主要值有以下幾種:\

      ACCESS_BUFFER :加載文件到內存中,這種方式適合小文件的讀取;

      ACCESS_RANDOM:可以隨意的向前或者向後的讀取數據塊

      ACCESS_STRAMING:順序的讀取內容

      ACCESS_UNKNOWN:當沒有明確指定時,使用默認模式

      這裡我們一定要注意,open(String fileName)默認的使用ACCESS_STREAMING模式進行讀取!!

      那麼我們如何獲得一個AssetManager對象呢,在activity中我們可以通過以下的代碼獲取:

      [java] view plaincopy
      1. //工程根目錄下的assets文件夾中存放,比如assets/test.xml 這樣我們使用下面的代碼
      2. AssetManager am = this.getResources().getAsset();
      3. //或者AssetManager am = this.getAssets();
      4. InputStream is = am.open(test.xml);

        如何訪問res目錄下的文件呢?

        我們在activity中可以通過如下方法進行訪問:

        [java] view plaincopy
        1. //res/raw目錄下存放,比如test.xml一個二進制文件,我們可以讀取可以直接
        2. InputStream is=context.getResources().openRawResource(R.raw.test);

          最後,我們一定要注意一下三點:

          存放在res/raw下的文件,會相應的生成ID,而在assets下的文件,不會生成ID;

          asset和res下的文件都是只能讀不能寫的;

          在AssertManager中不能處理單個超過 1MB的文件,不然會報異常,而第二種raw沒這個限制。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved