在安卓工程目录下面经常会有assets和res/raw这两个文件目录,而且我们都知道在这两个文件夹中存放的资源一般不要大于1M;
这两个文件目录里的文件都会直接在打包apk的时候直接打包到apk中,携带在应用里面供应用访问,而且不会被编译成二进制;
他们的不同点在于:1、assets中的文件资源不会映射到R中,而res中的文件都会映射到R中,所以raw文件夹下的资源都有对应的ID;2、assets可以能有更深的目录结构,而res/raw里面只能有一层目录;3、资源存取方式不同,assets中利用AssetsManager,而res/raw直接利用getResource(),openRawResource(R.raw.fileName),很多人认为是R.id.filename,其实正确的是R.raw.filename,就像R.drawable.filename一样,整体表示一个ID值,并非是R.id.filename;
示例代码如下:
1、res/raw:
StringBuilder sb = new StringBuilder();
InputStream in = null;
in = getResources().openRawResource(R.raw.introduction);
if (in != null) {
InputStreamReader isr = new InputStreamReader(in);
BufferedReader br = new BufferedReader(isr);
char [] buf = new char[1024];
int len = 0;
while ((len = br.read(buf)) > 0) {
sb.append(buf, 0, len);
}
} else {
Log.e(TAG, "Read introduction file error");
return;
}
2、assets:
AssetManager assetManager = getAssets();//获取AssetManager
InputStream in = assetManager.open(fileName);