Android中资源文件放置于res目录,经常使用的几种不再叙述,总结下不经常使用的几种,权作笔记,如有错误,敬请指正
1、res/raw目录
特点:
1、打包后会原封不动的保存在apk包中,不会被编译成二进制
2、res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.raw.filename
3、res/raw不可以有目录结构,也就说说raw目录内不能包含文件夹
4、单文件最大不能超过1M,如果大于1M可以采用zip压缩或者切割为几个小与1M的文件,具
体的示例有空会写下
资源的使用方式:
InputStream is = getResources().openRawResource(R.raw.filename);
会返回一个InputStream 流,具体示例如下:
/**
* 检查默认的 com.android.test_preferences.xml文件是否存在,不存在的话copy至对应目录
*
* @author ***
* @see onCreate()
* @throws java.io.IOException
*/
private void checkDefaultConfigFile() {
String filename = "/data/data/" + getPackageName() + "/shared_prefs/com.android.test_preferences.xml.xml";
Log.i(TAG, "checkDefaultConfigFile() filename = " + filename);
File file = new File(filename);
if (!file.exists() || !file.isFile()) {
try {
if (!file.getParentFile().exists() || !file.getParentFile().isDirectory()) {
file.getParentFile().mkdirs();
}
file.createNewFile();
String command = "chmod 777 " + file.getAbsolutePath();
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec(command);
// !Warning 如果raw目录下的文件名称中包含多个".",会把第一个点后的文件都作为文件后缀,但是不影响文件读取
InputStream is = getApplicationContext().getResources().openRawResource(R.raw.com);
BufferedInputStream in = new BufferedInputStream(is);
FileOutputStream out = new FileOutputStream(file);
byte buffer[] = new byte[in.available()];
int len = in.read(buffer);
while (len != -1) {
out.write(buffer, 0, len);
len = in.read(buffer);
}
out.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2、res/xml目录
特点: 1、打包后会被编译成二进制
2、会被映射到R.java文件中,访问的时候直接使用资源ID即R.xml.filename
3、可以直接返回一个 XmlResourceParser 实例
资源的使用方式:
XmlResourceParser xml = getResources().getXml(R.xml.filename);
3、assets目录
特点: 1、打包后会原封不动的保存在apk包中,不会被编译成二进制
2、可以有目录结构,也就是assets目录下可以再建立文件夹
3、文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类
资源的使用方式:
try {
InputStream is = getAssets().open("filename");
} catch (IOException e) {
e.printStackTrace();
}