Assets 读取assets中的文件

res/raw和assets的相同点:

1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。

res/raw和assets的不同点:
1.res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类。
2.res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹

读取文件资源:

1.读取res/raw下的文件资源,通过以下方式获取输入流来进行写操作

  • InputStream is = getResources().openRawResource(R.id.filename);  

2.读取assets下的文件资源,通过以下方式获取输入流来进行写操作

    • 获得AssetManger对象 AssetManager am = getAssets();  
    • 获得读取文件的输入流读取文件 InputStream inputStream=am.open(fileName);
    • 关闭AssetManger和inputStream; 

下面演示代码:

1.TestActivity.java

 1 import java.io.BufferedReader;
 2 import java.io.InputStreamReader;
 3 
 4 import android.app.Activity;
 5 import android.content.res.AssetManager;
 6 import android.graphics.Color;
 7 import android.os.Bundle;
 8 import android.view.View;
 9 import android.view.View.OnClickListener;
10 import android.widget.Button;
11 import android.widget.EditText;
12 
13 public class TestActivity extends Activity {
14     private Button btn;
15     private EditText editText;
16     private AssetManager am;
17     @Override
18     protected void onCreate(Bundle savedInstanceState) {
19         // TODO Auto-generated method stub
20         super.onCreate(savedInstanceState);
21         setContentView(R.layout.main);
22         editText=(EditText)findViewById(R.id.et);
23         editText.setBackgroundColor(Color.GRAY);
24         btn=(Button)findViewById(R.id.bn);
25         btn.setOnClickListener(new OnClickListener() {
26             
27             @Override
28             public void onClick(View v) {
29                 // TODO Auto-generated method stub
30                 //获得assetManger对象
31                 am=getAssets();
32                 editText.setText(fromAssets("hello.txt"));
33             }
34         });
35     }
36     private String fromAssets(String fileName){
37         /*
38          * 以下代码是重点代码,用途广泛,和文件下载的代码一样
39          */
40         StringBuffer sb=new StringBuffer();
41         String line=null;
42         BufferedReader buffer=null;
43         try{
44             //此段代码为了将inputStream包装为bufferedReader,方便调用bufferedReader的readLine方法
45             buffer=new BufferedReader(new InputStreamReader(am.open(fileName)));
46             while((line=buffer.readLine())!=null){
47                 sb.append(line);
48             }
49             
50         }catch(Exception e){
51             e.printStackTrace();
52         }finally{
53             try{
54                 //关闭am和buffer
55                 am.close();
56                 buffer.close();
57             }catch(Exception e){
58                 e.printStackTrace();
59             }
60         }
61         return sb.toString();
62     }
63 
64 }

2.main.xml

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     android:layout_width="fill_parent"
 3     android:layout_height="fill_parent"
 4     android:orientation="vertical" >
 5     <EditText
 6         android:id="@+id/et"
 7         android:layout_width="fill_parent"
 8         android:layout_height="wrap_content"
 9         android:editable="false"
10         android:cursorVisible="false"
11         />
12     <Button
13         android:id="@+id/bn"
14         android:layout_width="fill_parent"
15         android:layout_height="wrap_content"
16         android:text="read"
17         />
18 </LinearLayout>
原文地址:https://www.cnblogs.com/gdpdroid/p/3658786.html