res/raw和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下的文件资源,通过以下方式获取输入流来进行写操作

  • AssetManager am = null;  
  • am = getAssets();  
  • InputStream is = am.open("filename");  

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 中的文件只可以读取而不能进行写的操作
以下为Assets文件中读取:

[java]  view plain  copy
 print ?
  1. public class ReadAsset extends Activity  
  2. {  
  3.     @Override  
  4.     protected void onCreate(Bundle savedInstanceState)  
  5.     {  
  6.         super.onCreate(savedInstanceState);  
  7.   
  8.           
  9.         setContentView(R.layout.read_asset);  
  10.   
  11.      
  12.         try {  
  13.             InputStream is = getAssets().open("read_asset.txt");//文件夹下的一个二进制文件  
  14.               
  15.               
  16.             int size = is.available();  
  17.               
  18.             // Read the entire asset into a local byte buffer.  
  19.             byte[] buffer = new byte[size];  
  20.             is.read(buffer);  
  21.             is.close();  
  22.               
  23.             // Convert the buffer into a string.  
  24.             String text = new String(buffer);  
  25.               
  26.             // Finally stick the string into the text view.  
  27.             TextView tv = (TextView)findViewById(R.id.text);  
  28.             tv.setText(text);  
  29.         } catch (IOException e) {  
  30.             // Should never happen!  
  31.             throw new RuntimeException(e);  
  32.         }  
  33.     }  
  34. }  
以下为从Raw文件中读取:
[java]  view plain  copy
 print ?
  1. public String getFromRaw(){   
  2.            try {   
  3.                InputStreamReader inputReader = new InputStreamReader( getResources().openRawResource(R.raw.test1));  
  4.                BufferedReader bufReader = new BufferedReader(inputReader);  
  5.                String line="";  
  6.                String Result="";  
  7.                while((line = bufReader.readLine()) != null)  
  8.                    Result += line;  
  9.                return Result;  
  10.            } catch (Exception e) {   
  11.                e.printStackTrace();   
  12.            }               

你可能感兴趣的:(资源文件)