今天,简单讲讲如何读取assets文件夹下的文件。

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

Android除了提供/res目录存放资源文件外,在/assets目录也会提供存放资源文件,在/assets目录下面不会在R.java里面自动生成ID,所以读取assets目录下面的资源文件需要提供路径,我们可以通过AssetManager类来访问这些文件。

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 这就是今天我们要读取的文件啦。

health.txt可以自己写点内容放进assets文件夹下就可以了。

接下来,就是今天的重头戏,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;@Overridepublic 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"));
}//从assets 文件夹中获取文件并读取数据
public String getFromAssets(String fileName){String result = "";try {
InputStream in = getResources().getAssets().open(fileName);
//获取文件的字节数
int lenght = in.available();
//创建byte数组
byte[]  buffer = new byte[lenght];
//将文件中的数据读到byte数组中
in.read(buffer);
result = EncodingUtils.getString(buffer, ENCODING);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}

然后就可以运行了。

android 读取assets文件夹下的文件资源就讲完了。

就这么简单。



android 读取assets文件夹下的文件资源相关推荐

  1. Android读取asserts和raw文件夹下的文件

    Android读取asserts和raw文件夹下的文件 经常需要用到读取"/res/raw"和"/asserts"文件夹下的文件,索性写成工具类方便以后使用. ...

  2. webpack 读取文件夹下的文件_TypeScript完全解读(26课时)_1.TypeScript完全解读-开发环境搭建...

    1.TypeScript完全解读-开发环境搭建 初始化项目 手动创建文件夹 D:\MyDemos\tsDemo\client-demo 用VSCode打开 npm init:初始化项目 然后我们的项目 ...

  3. Android Studio SD卡访问权限及asserts文件夹下的文件操作

    Android Studio SD卡访问权限 1.在 AndroidManifext.xml 中添加如下代码 <uses-permission android:name="androi ...

  4. python怎么读文件夹下的文件夹-python2.7读取文件夹下所有文件名称及内容的方法...

    最近稍稍有点空闲时间,于是重新温习了一下之前学习过的python基础.废话不多说,记录一下自己的所得. 首先,安装什么的不在本人的温习范围,另,本人使用的是windows下的python2.7版本,且 ...

  5. C# 读取指定文件夹下所有文件

    #region 读取文件 //返回指定目录中的文件的名称(绝对路径)string[] files = System.IO.Directory.GetFiles(@"D:\Test" ...

  6. python读取文件夹下所有文件的名称_python2.7 学习之读取文件夹下所有文件名称及内容...

    python2.7 学习之读取文件夹下所有文件名称及内容 最近稍稍有点空闲时间, 于是重新温习了一下之前学习过的 python 基础废话不多说, 记录一下自己的所得 首先, 安装什么的不在本人的温习范 ...

  7. 用递归方法实现读取文件夹下所有文件信息

    要实现读取文件夹下所有文件信息,其实只要用个递归方法就可以简单实现了 下面为自定义的一个类其中的showEveryFile方法就是为读取给定文件夹下每一个文件 using System; using ...

  8. java读取文件夹下所有文件并替换文件每一行中指定的字符串

    java读取文件夹下所有文件并替换文件每一行中指定的字符串 该文章为转载文章,请尊重原文作者的劳动成果,好的文章应该被展示 原文传送门 多说两句,关键时候救人性命的人,可以称之为大人,随时做好利见大人 ...

  9. Linux C 读取文件夹下所有文件(包括子文件夹)

    Linux C 读取文件夹下所有文件(包括子文件夹) 递归读取某文件夹及其子文件夹下所有文件名 深入探讨:linux中遍历文件夹下的所有文件 Linux C :遍历输出指定目录下的所有文件 Linux ...

最新文章

  1. 大学生学python到底有没有有-除了不会生孩子,Python还有啥不会的呢
  2. PHP几种常见魔术方法与魔术变量解析
  3. ant编译java工程总结
  4. Android NDK 编译选项设置[zhuan]
  5. SAP PO相关打印编程
  6. oracle 以1开头以9结尾_为什么你看到的价格总以数字“9”结尾?
  7. 95. Unique Binary Search Trees II 不同的二叉搜索树 II
  8. JDK 9是某些功能的终结
  9. 杭电1799循环多少次?
  10. 施耐德 m340 编程手册_施耐德PLC漏洞历险记
  11. ubuntu 12.04 源码安装 Xen 4.2
  12. 吃自己的狗食,用自己的产品——再谈华为芯片
  13. 【数字图像处理系列五】图像滤波之空间滤波:图像平滑降噪和图像锐化
  14. 微软visio2013安装问题及解决过程
  15. 台币转换计算机,Soulver 内建自动计算机功能的备忘录工具 货币换算、複杂数学式也支援...
  16. 分布式 | dble元数据更新同步
  17. u盘修复计算机系统,如何使用u盘修复系统
  18. Android12前台服务问题
  19. 全面解读Marshmallow
  20. 块存储、文件存储、对象存储

热门文章

  1. C# JArray与JObject 的使用
  2. linux 硬软链接区别
  3. 什么是Intent? 转
  4. Remove Nth Node From End of List
  5. canvas绘制阴影
  6. selenium IE 浏览器驱动下载地方
  7. .net MVC 简单图片上传
  8. redis文档翻译_key设置过期时间
  9. Codeforces Round #321 (Div. 2) B. Kefa and Company (尺取)
  10. NSWindow上添加NSView