您的位置:首页 > 移动开发 > Android开发

Android assets资源读取

2016-07-18 15:35 351 查看
因为系统在编译的时候不会编译assets下的资源文件,所以我们不能通过R.XXX.ID的方式访问它们。那我么能不能通过该资源的绝对路径去访问它们呢?因为apk安装之后会放在/data/app/**.apk目录下,以apk形式存在,asset/res和被绑定在apk里,并不会解压到/data/data/YourApp目录下去,所以我们无法直接获取到assets的绝对路径,因为它们根本就没有。


但是Android系统为我们提供了一个AssetManager工具类。

//加载assets/win8_Demo/目录下的index.html网页

webView.loadUrl("file:///android_asset/win8_Demo/index.html");


这种方式可以加载assets目录下的网页,并且与网页有关的文件也会被加载。

AssetManager.open(String filename),返回的是一个InputSteam类型的字节流,这里的filename必须是文件比如(aa.txt;img/semll.jpg),而不能是文件夹。


//获取assets目录下的所有文件及目录名,content(当前的上下文如Activity,Service等ContextWrapper的子类的都可以)

String fileNames[] =context.getAssets().list(path);


/**
*  从assets目录中复制整个文件夹内容
*  @param  context  Context 使用CopyFiles类的Activity
*  @param  oldPath  String  原文件路径  如:/aa
*  @param  newPath  String  复制后路径  如:xx:/bb/cc
*/
public void copyFilesFassets(Context context,String oldPath,String newPath) {
try {
String fileNames[] = context.getAssets().list(oldPath);//获取assets目录下的所有文件及目录名
if (fileNames.length > 0) {//如果是目录
File file = new File(newPath);
file.mkdirs();//如果文件夹不存在,则递归
for (String fileName : fileNames) {
copyFilesFassets(context,oldPath + "/" + fileName,newPath+"/"+fileName);
}
} else {//如果是文件
InputStream is = context.getAssets().open(oldPath);
FileOutputStream fos = new FileOutputStream(new File(newPath));
byte[] buffer = new byte[1024];
int byteCount=0;
while((byteCount=is.read(buffer))!=-1) {//循环从输入流读取 buffer字节
fos.write(buffer, 0, byteCount);//将读取的输入流写入到输出流
}
fos.flush();//刷新缓冲区
is.close();
fos.close();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
//如果捕捉到错误则通知UI线程
MainActivity.handler.sendEmptyMessage(COPY_FALSE);
}
}


//使用assets目录下的图片资源:
InputStream is=getAssets().open("wpics/0ZR424L-0.jpg");
Bitmap bitmap=BitmapFactory.decodeStream(is);
imgShow.setImageBitmap(bitmap);


//从assets 文件夹中获取文件并读取文字
public String getFromAssets(String fileName) {
String result = "";
try {
InputStream in = this.getResources().getAssets().open(fileName);
//BufferedReader bufReader = new BufferedReader(inputReader);
//获取文件的字节数
int lenght = in.available();
//创建byte数组
//byte[] buffer = new byte[lenght];
byte[] bt = new byte[1024];
int lens = 0;
//将文件中的数据读到byte数组中
while ((lens = in.read(bt)) != -1) {
result += new String(bt, 0, lens);
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android assets apk