android 对于asset和raw下文件的操作

2024-01-21 08:38
文章标签 android 操作 asset raw

本文主要是介绍android 对于asset和raw下文件的操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

android 对于asset和raw下文件的操作

Android 中资源分为两种,一种是res下可编译的资源文件, 这种资源文件系统会在R.Java里面自动生成该资源文件的ID,访问也很简单,只需要调用R.XXX.id即可;第二种就是放在assets文件夹下面的原生资源文件,放在这个文件夹下面的文件不会被R文件编译,所以不能像第一种那样直接使用.Android提供了一个工具类,方便我们操作获取assets文件下的文件:AssetManager

介绍函数
String[] list(String path);//列出该目录下的下级文件和文件夹名称
InputStream open(String fileName);//以顺序读取模式打开文件,默认模式为ACCESS_STREAMINGInputStream open(String fileName, int accessMode);//以指定模式打开文件。读取模式有以下几种://ACCESS_UNKNOWN : 未指定具体的读取模式//ACCESS_RANDOM : 随机读取//ACCESS_STREAMING : 顺序读取//ACCESS_BUFFER : 缓存读取
void close()//关闭AssetManager实例
加载assets目录下的网页
webView.loadUrl("file:///android_asset/html/index.htmll");

说明:这种方式可以加载assets目录下的网页,并且与网页有关的css,js,图片等文件也会的加载。

加载assets目录下的图片资源
InputStream is = getAssets().open(fileName);  
bitmap = BitmapFactory.decodeStream(is); 
ivImg.setImageBitmap(bitmap);
加载assets目录下文本文件
InputStream is = getAssets().open(fileName);  
int lenght = is.available();  
byte[]  buffer = new byte[lenght];  
is.read(buffer);  
String result = = new String(buffer, "utf8");
加载assets目录下音乐
// 打开指定音乐文件,获取assets目录下指定文件的AssetFileDescriptor对象  
AssetFileDescriptor afd = am.openFd(music);  
mPlayer.reset();  
// 使用MediaPlayer加载指定的声音文件。  
mPlayer.setDataSource(afd.getFileDescriptor(),  afd.getStartOffset(), afd.getLength());  
// 准备声音  
mPlayer.prepare();  
// 播放  
mPlayer.start();  
加载assets目录下视频
private void initview() {vv = (CustomVideoView) view.findViewById(R.id.videoView111);//vv.setVideoPath("/mnt/hd/Wonder Girls - Nobody.avi");Uri uri = copyFile("one.3gp");vv.setVideoURI(uri); vv.start();}public Uri copyFile(String name) {try {File dir = getActivity().getFilesDir();File file = new File(dir, name);if (file.exists()) {Log.d("Test", "=========file exist=========");return Uri.fromFile(file);} else {file.createNewFile();OutputStream os = new FileOutputStream(file);InputStream is = getActivity().getAssets().open(name);byte[] buffer = new byte[1024];int bufferRead = 0;while((bufferRead = is.read(buffer)) != -1) {os.write(buffer, 0, bufferRead);}os.flush();is.close();os.close();Log.d("Test", "=========copyFile success=========");return Uri.fromFile(file);}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}
获取raw目录下的资源 返回流和文件路径
/*** 获取raw目录下的资源** @param resId 资源id*/
public static InputStream getRawStream(Context context, int resId) {return context.getResources().openRawResource(resId);}
/*** 获取raw目录下的资源** @param resId 资源id*/
public static String getRawFilePath(Context context, int resId) {return "android.resource://" + context.getPackageName() + "/" + resId;
}
拷贝assets中文件到指定路径
/**  从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);  
}                             
} 
以下是完整的工具类代码 直接拷贝到工程中就可以使用
package com.insworks.lib_datas.utils;import android.content.Context;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.util.Log;import java.io.Closeable;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

这篇关于android 对于asset和raw下文件的操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/628957

相关文章

Python中文件读取操作漏洞深度解析与防护指南

《Python中文件读取操作漏洞深度解析与防护指南》在Web应用开发中,文件操作是最基础也最危险的功能之一,这篇文章将全面剖析Python环境中常见的文件读取漏洞类型,成因及防护方案,感兴趣的小伙伴可... 目录引言一、静态资源处理中的路径穿越漏洞1.1 典型漏洞场景1.2 os.path.join()的陷

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Python使用Code2flow将代码转化为流程图的操作教程

《Python使用Code2flow将代码转化为流程图的操作教程》Code2flow是一款开源工具,能够将代码自动转换为流程图,该工具对于代码审查、调试和理解大型代码库非常有用,在这篇博客中,我们将深... 目录引言1nVflRA、为什么选择 Code2flow?2、安装 Code2flow3、基本功能演示

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

python操作redis基础

《python操作redis基础》Redis(RemoteDictionaryServer)是一个开源的、基于内存的键值对(Key-Value)存储系统,它通常用作数据库、缓存和消息代理,这篇文章... 目录1. Redis 简介2. 前提条件3. 安装 python Redis 客户端库4. 连接到 Re

Java Stream.reduce()方法操作实际案例讲解

《JavaStream.reduce()方法操作实际案例讲解》reduce是JavaStreamAPI中的一个核心操作,用于将流中的元素组合起来产生单个结果,:本文主要介绍JavaStream.... 目录一、reduce的基本概念1. 什么是reduce操作2. reduce方法的三种形式二、reduce

MySQL表空间结构详解表空间到段页操作

《MySQL表空间结构详解表空间到段页操作》在MySQL架构和存储引擎专题中介绍了使用不同存储引擎创建表时生成的表空间数据文件,在本章节主要介绍使用InnoDB存储引擎创建表时生成的表空间数据文件,对... 目录️‍一、什么是表空间结构1.1 表空间与表空间文件的关系是什么?️‍二、用户数据在表空间中是怎么

Python对PDF书签进行添加,修改提取和删除操作

《Python对PDF书签进行添加,修改提取和删除操作》PDF书签是PDF文件中的导航工具,通常包含一个标题和一个跳转位置,本教程将详细介绍如何使用Python对PDF文件中的书签进行操作... 目录简介使用工具python 向 PDF 添加书签添加书签添加嵌套书签Python 修改 PDF 书签Pytho

Mysql数据库中数据的操作CRUD详解

《Mysql数据库中数据的操作CRUD详解》:本文主要介绍Mysql数据库中数据的操作(CRUD),详细描述对Mysql数据库中数据的操作(CRUD),包括插入、修改、删除数据,还有查询数据,包括... 目录一、插入数据(insert)1.插入数据的语法2.注意事项二、修改数据(update)1.语法2.有

Python文件操作与IO流的使用方式

《Python文件操作与IO流的使用方式》:本文主要介绍Python文件操作与IO流的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、python文件操作基础1. 打开文件2. 关闭文件二、文件读写操作1.www.chinasem.cn 读取文件2. 写