Android笔记(四十九) Android中的资源访问——asset

    1.文件读取方式
    AssetManager.open(String filename),返回的是一个InputSteam类型的字节流,这里的filename必须是文件,而不能是文件夹,AssetManager打开资源文件的open方法是一个重载方法,可以添加一个打开方式的int参数,根据参数不同可做相应操作。

    2.资源文件是可以存在文件夹以及子目录
    public final String[]list(String path),返回当前目录下面的所有文件以及子目录的名称。可以通过递归遍历整个文件目录,实现所有资源文件的访问。

MainActivity.java

package cn.lixyz.iotest.activity;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import cn.lixyz.iotest.R;
import cn.lixyz.iotest.util.IOFile;

public class MainActivity extends Activity implements OnClickListener {

    private Button bt_asset_read;

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

        findView();

        bt_asset_read.setOnClickListener(this);
    }

    public void findView() {
        bt_asset_read = (Button) findViewById(R.id.bt_asset_read);
    }

    @Override
    public void onClick(View v) {
        IOFile ioFile;
        switch (v.getId()) {
        case R.id.bt_asset_read:
            ioFile = new IOFile(this);
            ioFile.readFromAsset(this);
            break;
        }
    }

}

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="cn.lixyz.iotest.activity.MainActivity" >

    <Button
        android:id="@+id/bt_asset_read"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="ASSET目录读取" />

</LinearLayout>

IOFile.java

package cn.lixyz.iotest.util;

import java.io.IOException;
import java.io.InputStream;

import android.content.Context;
import android.content.res.AssetManager;
import android.util.Log;

public class IOFile {

    Context mContext;

    public IOFile(Context context) {
        mContext = context;
    }

    // 读取asset目录中的内容
    public void readFromAsset(Context context) {
        try {
            // 获取asset管理器
            AssetManager assetManager = context.getAssets();
            // 通过asset管理器获取asset目录下的子目录下的文件
            String[] filesName = assetManager.list("txts");

            // 循环读出文件内容
            for (int i = 0; i < filesName.length; i++) {

                InputStream inputStream = assetManager.open("txts/" + filesName[i]);
                byte[] bytes = new byte[inputStream.available()];
                inputStream.read(bytes);
                String str = new String(bytes);

                Log.d("TTTT", filesName[i] + "的内容是:" + str);
            }

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}
原文地址:https://www.cnblogs.com/xs104/p/4926630.html