1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Android开发笔记(二十五)assets目录下的文件读取

Android开发笔记(二十五)assets目录下的文件读取

时间:2022-03-27 04:15:19

相关推荐

Android开发笔记(二十五)assets目录下的文件读取

AssetManager工具类

assets目录用于存放应用程序的资产文件,该目录下的文件不会被系统编译,所以无法通过R.*.*这种方式来访问。Android专门为assets目录提供了一个工具类AssetManager,通过该工具,我们能够以字节流方式打开assets下的文件,并将字节流转换为文本或者图像。

AssetManager提供了如下方法用于处理assets:

1、 String[] list(String path);

列出该目录下的下级文件和文件夹名称

2、 InputStream open(String fileName);

以顺序读取模式打开文件,默认模式为ACCESS_STREAMING

3、 InputStream open(String fileName, int accessMode);

以指定模式打开文件。读取模式有以下几种:

ACCESS_UNKNOWN : 未指定具体的读取模式

ACCESS_RANDOM : 随机读取

ACCESS_STREAMING : 顺序读取

ACCESS_BUFFER : 缓存读取

4、 void close()

关闭AssetManager实例

assets下的文件操作

assets目录下主要存放四种文件:文本文件、图像文件、网页文件(包括html中引用的js/ccs/jpg等资源)、音频视频文件

文本文件的读取操作:使用InputStream的read方法读出字节数组,然后按照指定字符编码将其转换为字符串。

图像文件的读取操作:使用BitmapFactory的decodeStream方法,将字节流转化为位图。

网页文件的读取操作:使用WebView的loadUrl方法,直接将网页文件加载到WebView控件中。

音频视频文件的读取操作:暂无

下面是完整的示例代码

import java.io.IOException;import java.io.InputStream;import com.example.exmassets.R;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.webkit.WebView;import android.webkit.WebViewClient;import android.widget.Button;import android.widget.ImageView;import android.widget.TextView;public class MainActivity extends Activity implements OnClickListener {private final String TAG = "MainActivity";private TextView tvHint;private TextView tvTxt;private ImageView ivImg;private WebView wvHtm;private String fileName;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tvHint = (TextView) findViewById(R.id.tvHint);tvTxt = (TextView) findViewById(R.id.tvTxt);ivImg = (ImageView) findViewById(R.id.ivImg);wvHtm = (WebView) findViewById(R.id.wvHtm);Button btn_txt = (Button) findViewById(R.id.btn_txt);Button btn_img = (Button) findViewById(R.id.btn_img);Button btn_htm = (Button) findViewById(R.id.btn_htm);btn_txt.setOnClickListener(this);btn_img.setOnClickListener(this);btn_htm.setOnClickListener(this);tvHint.setVisibility(View.VISIBLE);try {String[] fileNames = getAssets().list("");if (fileNames != null) {String fileDesc = String.format("assets根目录下找到%d个文件(夹):", fileNames.length);for (int i=0; i<fileNames.length; i++) {if (i != 0) {fileDesc = fileDesc + "、";}fileDesc = fileDesc + fileNames[i];}fileDesc = fileDesc + "。";tvHint.setText(fileDesc);} else {tvHint.setText("assets根目录下没有找到任何文件(夹)。");}Log.d(TAG, String.format("assets根目录下找到%d个文件(夹):", fileNames.length));} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}private String getTxtFromAssets(String fileName) {String result = "";try {InputStream is = getAssets().open(fileName);int lenght = is.available();byte[] buffer = new byte[lenght];is.read(buffer);result = new String(buffer, "utf8");} catch (Exception e) {e.printStackTrace();}return result;}private Bitmap getImgFromAssets(String fileName) {Bitmap bitmap = null;try {InputStream is = getAssets().open(fileName);bitmap = BitmapFactory.decodeStream(is);} catch (Exception e) {e.printStackTrace();}return bitmap;}@Overridepublic void onClick(View v) {if (v.getId() == R.id.btn_txt) {fileName = "txt/libai.txt";tvHint.setText("当前打开的文本文件名是:"+fileName);tvTxt.setVisibility(View.VISIBLE);ivImg.setVisibility(View.GONE);wvHtm.setVisibility(View.GONE);tvTxt.setText(getTxtFromAssets(fileName));} else if (v.getId() == R.id.btn_img) {fileName = "images/water.jpg";tvHint.setText("当前打开的图像文件名是:"+fileName);tvTxt.setVisibility(View.GONE);ivImg.setVisibility(View.VISIBLE);wvHtm.setVisibility(View.GONE);ivImg.setImageBitmap(getImgFromAssets(fileName));} else if (v.getId() == R.id.btn_htm) {fileName = "file:///android_asset/html/index.html";tvHint.setText("当前打开的网页文件名是:"+fileName);tvTxt.setVisibility(View.GONE);ivImg.setVisibility(View.GONE);wvHtm.setVisibility(View.VISIBLE);wvHtm.loadUrl(fileName);wvHtm.setWebViewClient(mWebViewClient);}}private WebViewClient mWebViewClient = new WebViewClient();}

下面是assets文件读取的效果图

点击下载本文用到的assets文件读取的工程代码

点此查看Android开发笔记的完整目录

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。