Android assets 和 res/raw 区别。读取本地网页,读取文本字体样式,读取视频。

来源:互联网 发布:win10回收站数据恢复 编辑:程序博客网 时间:2024/06/05 19:56

Android assets 和 res/raw 区别。读取本地网页,读取文本字体样式,读取视频。


res/raw和assets的相同点:

1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。


res/raw和assets的不同点:

1.res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类。

raw是Resources (res)的子目录,Android会自动的为这目录中的所有资源文件生成一个ID,这个ID会被存储在R类当中,作为一个文件的引用。这意味着这个资源 文件可以很容易的被Android的类和方法访问到,甚至在Android XML文件中你也可以@raw/的形式引用到它。在Android中,使用ID是访问一个文件最快捷的方式。MP3和Ogg文件放在这个目录下是比较合适 的.

assets: 无法在Android XML文件中引用到assets目录下的文件,只能通过AssetManager来访问这些文件。数据库文件和游戏数据等放在这个目录下是比较合适的。


2.res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹.


读取文件资源:


一、读取 res/raw文件

第一个测试:序列化和反序列化文件读取


try {// 测试序列化数据到文件// 第一步先在手机缓存目录生成一个序列化对象的文件// 然后将手机中生成的文件拷贝到项目res/raw 中做测试// 第二步用ObjectInputStream 反序列化读取对象// 创建一个对象Person people = new Person("张三", "男");// 实例化ObjectOutputStream对象ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(MainActivity.this.getExternalCacheDir().getPath() + "/person.text"));// 将对象写入文件oos.writeObject(people);oos.flush();oos.close();// 实例化ObjectInputStream对象//读取raw文件的方法openRawResource。InputStream is = getResources().openRawResource(R.raw.person);ObjectInputStream ois = new ObjectInputStream(is);try {// 读取对象people,反序列化Person p = (Person) ois.readObject();System.out.println("姓名:" + p.getName());System.out.println("性别:" + p.getSex());} catch (ClassNotFoundException e) {e.printStackTrace();}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}

在SDK缓存目录下生成一个person.text 的序列化文件

将其拷贝到项目res/raw 中做测试

注意:生成序列化文件和反序列化时,必须保持Person 类没有变化,比如包名,序列化id。都要保持一致。否则反序列化会报错。

public class Person implements Serializable {/** *  */private static final long serialVersionUID = 1L;


从raw中读取文件,生成InputStream 流

//读取raw文件的方法openRawResource。InputStream is = getResources().openRawResource(R.raw.person);

第二个测试:读取一个普通文件测试

代码如下:

//另外一个测试。读取test.text 文件BufferedReader bufReader = null;InputStreamReader isr = null;try {InputStream is = getResources().openRawResource(R.raw.test);isr = new InputStreamReader(is);bufReader = new BufferedReader(isr);String message = "";String line = null;while ((line = bufReader.readLine()) != null) {message += line;}System.out.println("message======" + message);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}


二、读取assets文件夹下文件:

public void OpenFileAssets(View v) {AssetManager am = null;am = getAssets();InputStream is = null;try {is = am.open("person.text");} catch (IOException e) {e.printStackTrace();}try {ObjectInputStream ois = new ObjectInputStream(is);try {// 读取对象people,反序列化Person p = (Person) ois.readObject();System.out.println("姓名:" + p.getName());System.out.println("性别:" + p.getSex());} catch (ClassNotFoundException e) {e.printStackTrace();}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}

关键读取文件的方法:生成InputStream 

AssetManager am = null;am = getAssets();InputStream is = null;try {is = am.open("person.text");} catch (IOException e) {e.printStackTrace();}

三、将字体样式文件放在 assets 中读取使用:

public void OpenFont(View v) {AssetManager am = getAssets();// 得到AssetManagerTypeface tf = Typeface.createFromAsset(am, "font/aaa.ttf");// 根据路径得到Typeface。注意文件夹名称。文件名要带文件类型vFontText.setTypeface(tf);// 设置字体}
注意文件目录,不用写assets,因为方法名就是createFromAsset  。

Typeface 还有如下方法,可能不支持放在raw下读取,没有测试。




四、加载本地Html网页,放在assets中读取。方法如下。

vWebView.loadUrl("file:///android_asset/webview_error.html");

五、读取项目中的 声音和视频文件,要放在raw 中读取。

播放视频文件

 vVideoView.setVideoURI(Uri.parse("android.resource://" + "com.example.maintest" + "/" + R.raw.movie)); vVideoView.start();

其中 com.example.maintest 项目包名。不要忘记调用start()方法播放视频。


注意:

播放项目工程里面的视频文件,不是播放SD卡视频文件。

开始尝试把视频文件放到 assets文件目录下。

模仿WebView 加载assets 下的Html文件。

我尝试将视频movie.mp4 放到assets目录下.。

结果报错了,无法播放。


播放Android项目工程里的视频文件最终解决办法是:
1. 把视频文件放到项目工程的 res/raw 文件下。
2.视频文件必须是Android支持视频格式(3gp,wmv,mp4),并且命名必须是小写字母,数据,下划线,例如:my_video_file.mp4
3. 当你是在代码里面引用这个资源文件时,你必须使用Rstatics类,同时去掉文件的后缀:R.raw.my_video_file
4. 构造正确的URI


源码

0 0
原创粉丝点击