如何读取assets目录下存放的原生资源文件

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,它允许你以简单的字节流的形式打开和读取和应用程序绑定在一起的原始资源文件。

AssetManager类


概述:

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

AssetManager类常用方法:

Public Methods


final String[] list(String path)
返回指定路径下的所有文件及目录名。
final InputStream open(String fileName)
使用 ACCESS_STREAMING模式打开assets下的指定文件。.
final InputStream open(String fileName, int accessMode)
使用显示的访问模式打开assets下的指定文件.

应用实战:

如何在Android Studio中放置assets文件夹那么应该把这个目录放到是没位置呢?
答案就是/src/main/assets。

对应文件位置:


对应代码:

public void onClick(View view) {
    switch (view.getId()) {
        case R.id.id_DrugView:
            startActivity(new Intent(this,DrugActivity.class));
            break;
        case R.id.id_readFromAssets:
            String fileName = "53844/curve.bin";
            String temp = getFromAssets(fileName);
            Toast.makeText(this,temp,Toast.LENGTH_SHORT).show();
        default:
            break;
    }


}
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();
        return "";
    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值