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

相关文章

Ubuntu 24.04启用root图形登录的操作流程

《Ubuntu24.04启用root图形登录的操作流程》Ubuntu默认禁用root账户的图形与SSH登录,这是为了安全,但在某些场景你可能需要直接用root登录GNOME桌面,本文以Ubuntu2... 目录一、前言二、准备工作三、设置 root 密码四、启用图形界面 root 登录1. 修改 GDM 配

JSONArray在Java中的应用操作实例

《JSONArray在Java中的应用操作实例》JSONArray是org.json库用于处理JSON数组的类,可将Java对象(Map/List)转换为JSON格式,提供增删改查等操作,适用于前后端... 目录1. jsONArray定义与功能1.1 JSONArray概念阐释1.1.1 什么是JSONA

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

Java操作Word文档的全面指南

《Java操作Word文档的全面指南》在Java开发中,操作Word文档是常见的业务需求,广泛应用于合同生成、报表输出、通知发布、法律文书生成、病历模板填写等场景,本文将全面介绍Java操作Word文... 目录简介段落页头与页脚页码表格图片批注文本框目录图表简介Word编程最重要的类是org.apach

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

c++中的set容器介绍及操作大全

《c++中的set容器介绍及操作大全》:本文主要介绍c++中的set容器介绍及操作大全,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录​​一、核心特性​​️ ​​二、基本操作​​​​1. 初始化与赋值​​​​2. 增删查操作​​​​3. 遍历方

MySQL追踪数据库表更新操作来源的全面指南

《MySQL追踪数据库表更新操作来源的全面指南》本文将以一个具体问题为例,如何监测哪个IP来源对数据库表statistics_test进行了UPDATE操作,文内探讨了多种方法,并提供了详细的代码... 目录引言1. 为什么需要监控数据库更新操作2. 方法1:启用数据库审计日志(1)mysql/mariad

springboot如何通过http动态操作xxl-job任务

《springboot如何通过http动态操作xxl-job任务》:本文主要介绍springboot如何通过http动态操作xxl-job任务的问题,具有很好的参考价值,希望对大家有所帮助,如有错... 目录springboot通过http动态操作xxl-job任务一、maven依赖二、配置文件三、xxl-