Android:读取assets目录下文件(一)

在Android开发中,资源文件一般分为两种:

1.可编译的资源文件,放在res目录下,例如布局文件,这种资源文件系统会在R.java里面自动生成该资源文件的ID,直接通过R.X.ID就可以访问。
2.原生资源文件,保持原始的文件格式,存放在assets目录下。通过Android系统为我们提供的AssetManager,以简单的字节流的形式打开和读取这些资源文件。例如公司简介、服务协议等内容,通常放在这个文件夹。

这篇文章先讲下读取assets目录下的txt文件,示例代码如下:

package com.li.readassetfile;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import android.app.Activity;
import android.content.res.AssetManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.TextView;

public class ReadTxtActivity extends Activity {

    private TextView tvContent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_read_txt);

        tvContent = (TextView) findViewById(R.id.tvContent);

        new ReadTxtTask().execute();
    }

    private class ReadTxtTask extends AsyncTask<Void, Void, String> {

        @Override
        protected String doInBackground(Void... params) {
            AssetManager manager = getResources().getAssets();
            try {
                InputStream inputStream = manager.open("joke.txt");
                InputStreamReader isr = new InputStreamReader(inputStream,
                        "UTF-8");
                BufferedReader br = new BufferedReader(isr);
                StringBuilder sb = new StringBuilder();
                String length;
                while ((length = br.readLine()) != null) {
                    sb.append(length + "\n");
                }
                //关流
                br.close();
                isr.close();
                inputStream.close();

                return sb.toString();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return "";
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            tvContent.setText(result);
        }
    }
}

效果图:
读取txt文件

不要忘了关闭相关IO流。
另外,如果文件内容比较长,可能会引起ANR,所以这里使用AsyncTask来读取文件。

posted on 2017-12-23 23:26  lishbo  阅读(5548)  评论(0编辑  收藏  举报