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:

Android(java)学习笔记135:Android中assets文件夹资源的访问_第1张图片

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

Android(java)学习笔记135:Android中assets文件夹资源的访问_第2张图片

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


这个.txt文件,我们可以直接双击查看。如下所示。
Android(java)学习笔记135:Android中assets文件夹资源的访问_第3张图片 接下来,就是今天的重头戏,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>

最后,我们运行一下程序:
Android(java)学习笔记135:Android中assets文件夹资源的访问_第4张图片

更多相关文章

  1. android Manifest.xml全局配置文件中根标签中package属性及标签
  2. 谷歌关于Android平板应用开发的一些资源
  3. Android系统build/core下.mk文件分析
  4. android 通过lint以及android-resource-remover清楚不用的资源以
  5. android使用webview上传文件(支持相册和拍照)
  6. Android ImageView使用网络资源文件
  7. Android的文件存储(写入和读取)
  8. 文件对应
  9. Android 的网络编程(8)-文件上传功能

随机推荐

  1. Android(安卓)studio使用相机拍照,保存并
  2. coordinatelayout android:fitsSystemWin
  3. 黑马程序员12——android之事件传播机制
  4. 2019-04-01
  5. 用Android(安卓)Studio创建一个Android(
  6. Android(安卓)AysncTask 从源码角度简单
  7. 非常好看的android音量旋钮
  8. 关于android的开发环境
  9. Android+OpenCV4开发(一)——Android(安
  10. android 自定义接听电话时报错:java.lang.