Android资源文件分类:


Android资源文件大致可以分为两种:

第一种是res目录下存放的可编译的资源文件

这种资源文件系统会在R.java里面自动生成该资源文件的ID,所以访问这种资源文件比较简单,通过R.XXX.ID即可;

第二种是assets目录下存放的原生资源文件

因为系统在编译的时候不会编译assets下的资源文件所以我们不能通过R.XXX.ID的方式访问它们。那我么能不能通过该资源的绝对路径去访问它们呢?因为apk安装之后会放在/data/app/**.apk目录下,以apk形式存在,asset/res和被绑定在apk里,并不会解压到/data/data/YourApp目录下去,所以我们无法直接获取到assets的绝对路径,因为它们根本就没有。

还好Android系统为我们提供了一个AssetManager工具类

查看官方API可知,AssetManager提供对应用程序的原始资源文件进行访问;这个类提供了一个低级别的API,它允许你以简单的字节流的形式打开和读取和应用程序绑定在一起的原始资源文件。

1.assets文件夹资源的访问

assets文件夹里面的文件都是保持原始的文件格式,需要用AssetManager以字节流的形式读取文件。 1. 先在 Activity里面调用getAssets()来获取AssetManager引用。 2. 再用AssetManager的 open(String fileName, int accessMode)方法则指定读取的文件以及访问模式就能得到输入流InputStream。 3. 然后就是用已经open file 的inputStream读取文件,读取完成后记得inputStream. close()。 4.调用AssetManager. close()关闭AssetManager。

需要注意的是,来自Resources和Assets 中的文件只可以读取而不能进行写的操作
以下为从Raw文件中读取:

 public String getFromRaw(){             try {                 InputStreamReader inputReader = new InputStreamReader( getResources().openRawResource(R.raw.test1));                BufferedReader bufReader = new BufferedReader(inputReader);                String line="";                String Result="";                while((line = bufReader.readLine()) != null)                    Result += line;                return Result;            } catch (Exception e) {                 e.printStackTrace();             }                 } 

以下为直接从assets读取:

  public String getFromAssets(String fileName){             try {                  InputStreamReader inputReader = new InputStreamReader( getResources().getAssets().open(fileName) );                 BufferedReader bufReader = new BufferedReader(inputReader);                String line="";                String Result="";                while((line = bufReader.readLine()) != null)                    Result += line;                return Result;            } catch (Exception e) {                 e.printStackTrace();             }    } 

接下来,我们新建一个工程文件,命名为AssetsDemo:

然后建立一个布局文件,如下,很简单,无需我多介绍,大家一看就明白:

然后呢,我从网上找了段文字,存放在assets文件目录下,取名为health.txt 这就是今天我们要读取的文件啦。


这个.txt文件,我们可以直接双击查看。如下所示。
接下来,就是今天的重头戏,Android读取文件的核心代码。就直接贴代码了:
package com.assets.cn;import java.io.InputStream;import org.apache.http.util.EncodingUtils;import android.app.Activity;import android.graphics.Color;import android.os.Bundle;import android.widget.TextView;public class AssetsDemoActivity extends Activity {public static final String ENCODING = "UTF-8";TextView tv1;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);              tv1 = (TextView)findViewById(R.id.tv1);      tv1.setTextColor(Color.BLACK);      tv1.setTextSize(25.0f);      tv1.setText(getFromAssets("health.txt"));  }}

这里是mainfest文件:

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"      package="com.assets.cn"      android:versionCode="1"      android:versionName="1.0">    <uses-sdk android:minSdkVersion="8" />    <application android:icon="@drawable/icon" android:label="@string/app_name">        <activity android:name=".AssetsDemoActivity"                  android:label="@string/app_name">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application></manifest>

最后,我们运行一下程序:

更多相关文章

  1. NPM 和webpack 的基础使用
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. android Manifest.xml全局配置文件中根标签中package属性及标签
  4. Java多种方式动态生成doc文档
  5. Android高手进阶教程(四)之----Android(安卓)中自定义属性(attr.
  6. Android(安卓)add prebuilt lib(*.so) to Android.mk
  7. 获得 android 的 root 权限
  8. Android开发的重要方面之Makefile分析
  9. 如何在Android(安卓)Studio项目中导入开源库?

随机推荐

  1. Android(安卓)Choreographer 初始化
  2. android > ProgressBar
  3. Android(安卓)Calander Event
  4. Android(安卓)基本UI控件
  5. Android(安卓)studio 下载地址
  6. listview的特殊属性
  7. Android自带图标库
  8. android:password is deprecated: Use in
  9. sadsad
  10. android studio 不常见错误-------------