• Android 读取Assets下的资源文件


    做Android开发近半年了,东西越学越多,硬盘容量越来越小。很多东西找起来也不方便,为此,我打算从今天起把工作中学到的东西整理起来,写成日记。也希望与广大网友分享我的经验。一同进步。今天主要介绍文件读取。下面讲讲原理。如果大家不感兴趣,可以直接跳过。

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

    //从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;
    }
    }

    这里是mainfest文件。


    <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>
    
    最后,我们运行一下程序。

    细心的朋友也行会发现,这其实就是一个简单的阅读器了,哈哈......
    ok,全部讲解完毕,大家有不明白的可以给我留言。
    ====》源码下载:http://download.csdn.net/detail/gsg8709/4118291

  • 相关阅读:
    JavaScript 学习16.简化对象写法 上海
    JavaScript 学习11.字符串 String 对象 上海
    JavaScript 学习12.模板字符串(Template Strings) 上海
    JavaScript 学习10.使用const声明常量 上海
    JavaScript 学习9.使用let声明变量 上海
    JavaScript 学习13.Set 集合对象 上海
    一文讲透为Power Automate for Desktop (PAD) 实现自定义模块 附完整代码
    是时候使用 YAML 来做配置或数据文件了
    在博客文章中使用mermaid 定义流程图,序列图,甘特图
    .netcore+vue 实现压缩文件下载
  • 原文地址:https://www.cnblogs.com/wgscd/p/6738818.html
Copyright © 2020-2023  润新知