一、assets/xml/raw资源介绍
1.assets资源目录:assets目录下存放的资源代表应用无法直接访问的原生资源,这些文件将原封不动的存储到设备上,不会被编译为二进制形式,访问方式是通过文件名而不是资源ID。应用程序通过AssetManager以的字节流的形式来读取资源文件。assets与res/raw的区别是assets支持任意深度的子目录,这些资源文件不会生成任何资源ID。Android应用访问assets文件夹资源步骤如下:
(1)先在Activity中调用getAssets()来获取AssetManager引用;
(2)再用AssetManger的open(String fileName,int accessMode)方法指定读取的文件以及访问模式,从而得到文件的输入流InputStream。需要注意的是,fileName不能是目录。
(3)从输入流InputStream中读取数据,读取完成后关闭输入流(close());
(4)调用AssetManager.close()关闭AssetManager
示例代码:
- AssetManager assetManager = getResources().getAssets(); //获取管理assets目录资源的AssetManager引用
- InputStream inputStream = assetManager .open("data.txt"); //获取assets/data.txt资源文件的输入流
- InputStreamReader inputReader = new InputStreamReader(inputStream);
- BufferedReader bufReader = new BufferedReader(inputReader);
- while((line = bufReader.readLine())!=null) //按行读取输入流数据
- result +=line;
- return result;
- 或者
- InputStream inputStream = getResources().getAssets().open("data.txt"); //获取assets/data.txt文件的输入流
- int length = inputStream.available(); //获取文件的字节数
- byte[] buffer = new byte[length ]; //创建length大小byte字节数组
- inputStream.read(buffer); //将文件中的数据读到byte数组中
- String result = EncodingUtils.getString(buffer,"UTF-8"); //获得字符串数据
2.res/raw资源目录:raw目录下存放的资源代表应用无法直接访问的原生资源,这些文件将原封不动的存储到设备上,不会被编译为二进制形式,应用通过资源ID(R清单类索引项)访问raw目录下的资源。应用程序使用openRawResource以的字节流的形式来读取资源文件,raw不支持多级子目录。
示例代码:
- InputStreamReader inputReader = new InputStreamReader(getResources().openRawResource("data.txt"));
- BufferedReader bufReader = new BufferedReader(inputReader);
- while((line = bufReader.readLine())!=null) //按行读取输入流数据
- result +=line;
- return result;
3.res/xml资源目录:该目录用于存储通用的XML格式文件,同/res/drawable资源一样,xml资源将会被编译成二进制格式存放到最终的安装包里。xml目录不支持多级子目录,在开发中可以通过R类来访问这些文件资源并且解析里面的内容。
XML资源的内容如下res/xml/persons.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person age="100" 性别="男">张三</person>
<person age="23" 性别="男">李四</person>
<person age="44" 性别="女">王五</person>
<person age="78" 性别="男">赵六</person>
</persons>
示例代码:
- XmlResourceParser xmlParser = getResource().getXml(R.xml.persons);
- //获得res/xml/data.xml对应 XmlResourceParser解析器引用
- StringBuilder sb = new StringBuilder("");
- while(xmlParser.getEventType() != XmlPullParser.END_DOCUMENT){ //是否读取到XML文档结束判断
- if(xmlParser.getEventType() == XmlPullParser.START_TAG){ //遇到开始标签
- String tagName = xmlParser.getName(); //获得标签名
- if(tagName.equals("person")){ //根据标签名获取对应的属性
- String personAge = xmlParser.getAttributeValue(null,"age");//根据属性名来获取属性值
- String personSex = xmlParser.getAttributeValue(1); //根据属性名来获取属性值
- String person = xmlParser.nextText(); //获取文本结点的值
- String onePerson = "姓名:"+person+"性别:"+personSex+"age:"+personAge ;
- sb.append(onePerson );
- }