zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    OData – the best way to REST–实例讲解ASP.NET WebAPI OData (V4) Service & Client
    Oracle 免费的数据库--Database 快捷版 11g 安装使用与"SOD框架"对Oracle的CodeFirst支持
    PDF.NET 开发框架之 SOD框架 Ver 5.2 正式版开源源码发布
    变态的儿童国学教育与孔子真正的教育之道
    .net字符串数组查找方式效率比较
    Oracle根据字段值找到表名和列名
    Oracle卸载后手工删除内容
    Oracle服务启动顺序导致ORA-12514
    mysql由于权限问题看不到用户数据库
    MySql无法远程登录以及IP被锁解决办法
  • 原文地址:https://www.cnblogs.com/wgscd/p/6738818.html
Copyright © 2011-2022 走看看