我的Android之旅(十七)---raw和assets目录--数据的存取
来源:互联网 发布:关于51单片机与esp8266 编辑:程序博客网 时间:2024/06/05 15:43
raw是Resources (res)的子目录,Android会自动的为这目录中的所有资源文件生成一个ID,这个ID会被存储在R类当中,作为一个文件的引用。这意味着这个资源 文件可以很容易的被Android的类和方法访问到,甚至在Android XML文件中你也可以@raw/的形式引用到它。
assets目录更像一个附录类型的目录,Android不会为这个目录中的文件生成ID并保存在R类当中,因此它与 Android中的一些类和方法兼容度更低。
raw和assets的相同点:
1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。
raw和assets的不同点:
1.raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类。
2.raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹
二者读取文件内容的方式也不同:
1.读取raw下的文件资源,通过以下方式获取输入流来进行写操作
InputStream is = getResources().openRawResource(R.id.filename);
2.(1)读取assets下的文件资源,通过以下方式获取输入流来进行写操作
AssetManager am = null;
am = getAssets();
InputStream is = am.open("filename");
下面的例子就体现了二者在读取文件资源时的不同之处;
首先要建立raw文件以及assets目录,并分别在二者中新建File文件:
并在两个文件中任意输入一些数据,作为读取的资源。
.xml文件中的代码:
package com.jerehedu.jereduch10;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.TextView;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;public class ReadRawAndAssetsActivity extends AppCompatActivity {private Button raw,assets; private TextView show; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_read_raw_and_assets); raw= (Button) findViewById(R.id.raw); assets= (Button) findViewById(R.id.assets); show= (TextView) findViewById(R.id.show); raw.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { show.setText(readRaw()); } }); assets.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { show.setText(readAssets()); } }); } //读取Assets目录 public String readAssets(){ StringBuilder sbd=new StringBuilder(); InputStream is=null; BufferedReader reader=null; try { is= getResources().getAssets().open("setting"); reader=new BufferedReader(new InputStreamReader(is)); String row=""; while ((row=reader.readLine())!=null){ sbd.append(row); sbd.append("\n"); } } catch (IOException e) { e.printStackTrace(); }finally { if (reader!=null){ try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } return sbd.toString(); } //读取raw文件夹 public String readRaw(){ StringBuilder sbd=new StringBuilder(); InputStream is=null; BufferedReader reader = null; is=getResources().openRawResource(R.raw.setting1); reader=new BufferedReader(new InputStreamReader(is)); String row = ""; try { while ((row=reader.readLine())!=null){ sbd.append(row); sbd.append("\n"); } } catch (IOException e) { e.printStackTrace(); }finally { if (reader!=null){ try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } return sbd.toString(); }}
二者的区别在于:
获取数据的方法不同,其余差不多
读取Assets目录
is= getResources().getAssets().open("setting");
读取raw文件夹
is=getResources().openRawResource(R.raw.setting1);
布局中的代码:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.jerehedu.jereduch10.ReadRawAndAssetsActivity"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/raw" android:text="读取raw" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/assets" android:text="读取assets" android:layout_marginEnd="49dp" android:layout_alignParentTop="true" android:layout_alignEnd="@+id/show" /> <TextView android:layout_width="match_parent" android:layout_height="300dp" android:id="@+id/show" android:layout_centerVertical="true" android:layout_alignParentStart="true" /></RelativeLayout>
运行结果如下:
点击raw按钮:
点击ASSETS按钮:
在学的过程中一定要理解二者的区别。
- 我的Android之旅(十七)---raw和assets目录--数据的存取
- Android数据存储之——操作raw和assets目录下的文件
- android的资源目录 /res/xml /res/raw 和 /assets
- Android工程的assets和res/raw目录解析
- Android Studio的assets、raw目录详解
- raw和assets目录的区别
- android资源目录---assets与res/raw的不同assets
- android系列之二——Android中assets目录和res/raw目录的异同和使用场景
- android资源之res/raw和assets的异同
- android资源之res/raw和assets的异同
- Android assets目录与raw目录存放资源的异同
- Android中assets目录和res/raw目录的异同和使用场景
- Android中assets目录和res/raw目录的异同和使用场景
- Android中assets目录和res/raw目录的异同和使用场景
- Android中assets目录和res/raw目录的异同和使用场景
- Android中assets目录和res/raw目录的异同区别和使用场景
- Android中assets目录和raw目录的区别和使用情况
- Android中assets目录和res/raw目录的异同和使用场景
- JZOJ8.16(C组)最短路
- 多线程通讯之Handler实现
- 构造器的真正调用顺序
- hiho1079 : 离散化(线段树+区间离散化)
- Android Studio 优秀插件汇总
- 我的Android之旅(十七)---raw和assets目录--数据的存取
- BZOJ 2303 数学分析+并查集
- opencv之convexHull()用法
- G.Hinton Dark Knowledge
- android UI中常用的几个概念:dp,dip,dpi,sp,px,pt,ppi及它们之间的关联
- 深入理解Java的接口和抽象类
- QT类继承关系图
- CF#333(Div2) C. The Two Routes(最短路)
- i = i++