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>