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();
}
}