android 读取assets文件夹下的文件资源
今天,簡單講講如何讀取assets文件夾下的文件。
Android資源文件大致可以分為兩種:
第一種是res目錄下存放的可編譯的資源文件:
這種資源文件系統會在R.Java里面自動生成該資源文件的ID,所以訪問這種資源文件比較簡單,通過R.XXX.ID即可;
第二種是assets目錄下存放的原生資源文件:
因為系統在編譯的時候不會編譯assets下的資源文件,所以我們不能通過R.XXX.ID的方式訪問它們。那我么能不能通過該資源的絕對路徑去訪問它們呢?因為apk安裝之后會放在/data/app/**.apk目錄下,以apk形式存在,asset/res和被綁定在apk里,并不會解壓到/data/data/YourApp目錄下去,所以我們無法直接獲取到assets的絕對路徑,因為它們根本就沒有。
還好android系統為我們提供了一個AssetManager工具類。
查看官方API可知,AssetManager提供對應用程序的原始資源文件進行訪問;這個類提供了一個低級別的API,它允許你以簡單的字節流的形式打開和讀取和應用程序綁定在一起的原始資源文件。???
Android除了提供/res目錄存放資源文件外,在/assets目錄也會提供存放資源文件,在/assets目錄下面不會在R.java里面自動生成ID,所以讀取assets目錄下面的資源文件需要提供路徑,我們可以通過AssetManager類來訪問這些文件。
assets文件夾資源的訪問
assets文件夾里面的文件都是保持原始的文件格式,需要用AssetManager以字節流的形式讀取文件。
?? ? ?1. 先在Activity里面調用getAssets()?來獲取AssetManager引用。 ?? ? ?2. 再用AssetManager的open(String fileName, int accessMode)?方法則指定讀取的文件以及訪問模式就能得到輸入流InputStream。? ?? ? ?3. 然后就是用已經open file 的inputStream讀取文件,讀取完成后記得inputStream.close()?。 ?? ? ?4.調用AssetManager.close()?關閉AssetManager。
需要注意的是,來自Resources和Assets 中的文件只可以讀取而不能進行寫的操作
以下為從Raw文件中讀取:
代碼
接下來舉個例子
我們新建一個工程文件,命名為AssetsDemo。
然后建立一個布局文件,如下,很簡單,無需我多介紹,大家一看就明白。
然后呢,我從網上找了段文字,存放在assets文件目錄下,取名為health.txt 這就是今天我們要讀取的文件啦。
health.txt可以自己寫點內容放進assets文件夾下就可以了。
接下來,就是今天的重頭戲,Android讀取文件的核心代碼。就直接貼代碼了。
package com.assets.cn; import java.io.InputStream; import org.apache.http.util.EncodingUtils; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.widget.TextView; public class AssetsDemoActivity extends Activity { public static final String ENCODING = "UTF-8"; TextView tv1;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);tv1 = (TextView)findViewById(R.id.tv1); tv1.setTextColor(Color.BLACK); tv1.setTextSize(25.0f); tv1.setText(getFromAssets("health.txt")); }//從assets 文件夾中獲取文件并讀取數據 public String getFromAssets(String fileName){String result = "";try { InputStream in = getResources().getAssets().open(fileName); //獲取文件的字節數 int lenght = in.available(); //創建byte數組 byte[] buffer = new byte[lenght]; //將文件中的數據讀到byte數組中 in.read(buffer); result = EncodingUtils.getString(buffer, ENCODING); } catch (Exception e) { e.printStackTrace(); } return result; } }
然后就可以運行了。
android 讀取assets文件夾下的文件資源就講完了。
就這么簡單。
總結
以上是生活随笔為你收集整理的android 读取assets文件夹下的文件资源的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 将byte[]保存到手机
- 下一篇: android 内核态