在Android開發中,資源文件一般分為兩種:
1.可編譯的資源文件,放在res目錄下,例如布局文件,這種資源文件系統會在R.java里面自動生成該資源文件的ID,直接通過R.X.ID就可以訪問。
2.原生資源文件,保持原始的文件格式,存放在assets目錄下。通過Android系統為我們提供的AssetManager,以簡單的字節流的形式打開和讀取這些資源文件。例如公司簡介、服務協議等內容,通常放在這個文件夾。
這篇文章先講下讀取assets目錄下的txt文件,示例代碼如下:
package com.li.readassetfile;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import android.app.Activity;
import android.content.res.AssetManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.TextView;
public class ReadTxtActivity extends Activity {
private TextView tvContent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_read_txt);
tvContent = (TextView) findViewById(R.id.tvContent);
new ReadTxtTask().execute();
}
private class ReadTxtTask extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... params) {
AssetManager manager = getResources().getAssets();
try {
InputStream inputStream = manager.open("joke.txt");
InputStreamReader isr = new InputStreamReader(inputStream,
"UTF-8");
BufferedReader br = new BufferedReader(isr);
StringBuilder sb = new StringBuilder();
String length;
while ((length = br.readLine()) != null) {
sb.append(length + "\n");
}
//關流
br.close();
isr.close();
inputStream.close();
return sb.toString();
} catch (IOException e) {
e.printStackTrace();
}
return "";
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
tvContent.setText(result);
}
}
}
效果圖:

不要忘了關閉相關IO流。
另外,如果文件內容比較長,可能會引起ANR,所以這里使用AsyncTask來讀取文件。
