Android 的assets文件资源与raw文件资源读取

版权声明:本文为博主原创文章,未经博主同意不得转载。

https://blog.csdn.net/zpf8861/article/details/34504183

 

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文件里读取:

public class ReadAsset extends Activity
{
    @Override
	protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        
        setContentView(R.layout.read_asset);

   
        try {
            InputStream is = getAssets().open("read_asset.txt");//文件夹下的一个二进制文件
            
            
            int size = is.available();
            
            // Read the entire asset into a local byte buffer.
            byte[] buffer = new byte[size];
            is.read(buffer);
            is.close();
            
            // Convert the buffer into a string.
            String text = new String(buffer);
            
            // Finally stick the string into the text view.
            TextView tv = (TextView)findViewById(R.id.text);
            tv.setText(text);
        } catch (IOException e) {
            // Should never happen!
            throw new RuntimeException(e);
        }
    }
}
下面为从Raw文件里读取:
 public String getFromRaw(){ 
            try { 
                InputStreamReader inputReader = new InputStreamReader( getResources().openRawResource(R.raw.test1));
                BufferedReader bufReader = new BufferedReader(inputReader);
                String line="";
                String Result="";
                while((line = bufReader.readLine()) != null)
                    Result += line;
                return Result;
            } catch (Exception e) { 
                e.printStackTrace(); 
            }             
    } 



posted @ 2019-03-31 10:00  ldxsuanfa  阅读(333)  评论(0编辑  收藏  举报