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

介绍函数
String[] list(String path);//列出该目录下的下级文件和文件夹名称
InputStream open(String fileName);//以顺序读取模式打开文件,默认模式为ACCESS_STREAMING

 InputStream 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 block
e.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; /**
* @ProjectName: AndroidTemplateProject2
* @Package: com.insworks.lib_datas.utils
* @ClassName: AssetsUtil
* @Author: Song Jian
* @CreateDate: 2019/8/8 14:33
* @UpdateUser: 更新者
* @UpdateDate: 2019/8/8 14:33
* @UpdateRemark: 更新说明
* @Version: 1.0
* @Description: Assets和raw文件文件读取工具类
* <p>
* String[] list(String path);//列出该目录下的下级文件和文件夹名称
* <p>
* InputStream open(String fileName);//以顺序读取模式打开文件,默认模式为ACCESS_STREAMING
* <p>
* InputStream open(String fileName, int accessMode);//以指定模式打开文件。读取模式有以下几种:
* //ACCESS_UNKNOWN : 未指定具体的读取模式
* //ACCESS_RANDOM : 随机读取
* //ACCESS_STREAMING : 顺序读取
* //ACCESS_BUFFER : 缓存读取
*/
public class AssetsUtil {
/**
* 获取assets目录下的网页
* 这种方式可以加载assets目录下的网页,并且与网页有关的css,js,图片等文件也会的加载。
* webView.loadUrl("file:///android_asset/html/index.html");
*
* @param filePath
*/
public static String getHtml(String filePath) {
return "file:///android_asset/" + filePath;
} /**
* 获取所有文件
*
* @param path 目录
* @return
*/
public static String[] getfiles(Context context, String path) {
AssetManager assetManager = context.getAssets();
String[] files = null;
try {
files = assetManager.list(path);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
assetManager.close();
}
return files; } /**
* 获取assets目录下的图片资源
*
* @param fileName
*/
public static Bitmap getPic(Context context, String fileName) {
InputStream is = null;
Bitmap bitmap = null;
try {
is = context.getAssets().open(fileName);
bitmap = BitmapFactory.decodeStream(is); } catch (IOException e) {
e.printStackTrace();
} finally {
close(is);
}
return bitmap;
} /**
* 关闭流
*
* @param is
*/
private static void close(Closeable... is) {
for (Closeable i : is) {
try {
i.close();
} catch (IOException e) {
e.printStackTrace();
}
} } /**
* 获取assets目录下的文本资源
*
* @param fileName
*/
public static String getTex(Context context, String fileName) {
InputStream is = null;
String result = "";
try {
is = context.getAssets().open(fileName);
int lenght = is.available();
byte[] buffer = new byte[lenght];
is.read(buffer);
result = new String(buffer, "utf8");
} catch (IOException e) {
e.printStackTrace();
} finally {
close(is);
}
return result; } /**
* 获取assets目录下的音频资源
*
* @param fileName
*/
public static AssetFileDescriptor getAudio(Context context, String fileName) {
AssetFileDescriptor afd = null;
try {
// 打开指定音乐文件,获取assets目录下指定文件的AssetFileDescriptor对象
afd = context.getAssets().openFd(fileName);
// MediaPlayer mPlayer=new MediaPlayer();
// mPlayer.reset();
// // 使用MediaPlayer加载指定的声音文件。
// mPlayer.setDataSource(afd.getFileDescriptor(),
// afd.getStartOffset(), afd.getLength());
// // 准备声音
// mPlayer.prepare();
// // 播放
// mPlayer.start(); } catch (IOException e) {
e.printStackTrace();
} finally {
close(afd);
}
return afd; } /**
* 获取assets目录下的URI
* 可用于播放视频资源
*
* @param fileName
*/
public static Uri getUri(Context context, String fileName) {
File file = getFile(context, fileName);
//播放视频
// VideoView mVideoView = new VideoView(context);
// mVideoView.setVideoURI(Uri.fromFile(file));
// mVideoView.start();
return Uri.fromFile(file);
} /**
* 将流拷贝到本地 然后返回本地file 默认拷贝到Files目录
*
* @param context
* @param name
* @return
*/
public static File getFile(Context context, String name) {
InputStream is = null;
FileOutputStream os = null;
try {
File dir = context.getFilesDir();
File file = new File(dir, name);
if (file.exists()) {
return file; } else {
file.createNewFile();
os = new FileOutputStream(file);
is = context.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", "=========getFile success=========");
return file;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
close(is, os);
}
return null;
} /**
* 获取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目录中复制内容到sd卡中
*
* @param context Context 使用CopyFiles类的Activity
* @param assetPath String 原文件路径 如:/aa
* @param newPath String 复制后路径 如:xx:/bb/cc
*/
public static void copyFilesFassets(Context context, String assetPath, String newPath) {
InputStream is = null;
FileOutputStream fos = null;
try {
String fileNames[] = context.getAssets().list(assetPath);//获取assets目录下的所有文件及目录名
if (fileNames.length > 0) {//如果是目录
File file = new File(newPath);
file.mkdirs();//如果文件夹不存在,则递归
for (String fileName : fileNames) {
copyFilesFassets(context, assetPath + "/" + fileName, newPath + "/" + fileName);
}
} else {//如果是文件
is = context.getAssets().open(assetPath);
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线程
} finally {
close(is, fos);
}
} }

关于我

私人博客

微信公众号:infree6 或者直接扫码

android 对于asset和raw下文件的操作的更多相关文章

  1. (第三周)wc.exe—命令行实现对指定目录下文件的操作

    一.用户需求 程序处理用户需求的模式为: wc.exe [parameter][filename] 在[parameter]中,用户通过输入参数与程序交互,需实现的功能如下: 1.基本功能 支持 -c ...

  2. Android中asset和raw的区别

    :assets 文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像 xml, java 文件被预编译,可以存放一些图片,html,js, css 等文件.

  3. Android读写assets、raw、sdard和工程文件的方法

    Android开发离不开对文件的操作,前面的文章“Android简易数据存储之SharedPreferences”和“Android数据存储之SQLite的操作”,分别讲解了简单的数据的存储和数据库数 ...

  4. as3 AIR 添加或删除ApplicationDirectory目录下文件

    AIR的文件目录静态类型有五种: File.userDirectory //指向用户文件夹 File.documentsDirectory //指向用户文档文件夹 File.desktopDirect ...

  5. Android中asset文件夹和raw文件夹区别

    res/raw和assets的相同点: 1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制. res/raw和assets的不同点: 1.res/raw中的文件会被映射到R. ...

  6. Android中asset文件夹和raw文件夹区别与用法

    *res/raw和assets的相同点: 1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制. *res/raw和assets的不同点:1.res/raw中的文件会被映射到R ...

  7. Android中asset文件夹与raw文件夹的区别深入解析(转)

    *res/raw和assets的相同点:1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制.*res/raw和assets的不同点:1.res/raw中的文件会被映射到R.j ...

  8. Android读取asserts和raw文件夹下的文件

    Android读取asserts和raw文件夹下的文件 经常需要用到读取“/res/raw”和"/asserts"文件夹下的文件,索性写成工具类方便以后使用. 一.raw文件夹下的 ...

  9. Android Studio的使用(十)--读取assets、Raw文件夹下文件,以及menu、drawable文件夹

    1.直接在/src/main目录下面新建assets目录 2.接下来即可读取文件 3.读取Raw文件夹下文件也类似.首先在res文件夹下新建raw目录,然后放入需要的文件即可读取. 4.menu和dr ...

随机推荐

  1. kotlin之变量的可空与非空

    版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/218 kotlin之变量的可空与非空 上面一篇文章,介绍了 ...

  2. Mysql被黑客入侵及安全措施总结

    情况概述 今天登陆在腾讯云服务器上搭建的 MySQL 数据库,发现数据库被黑了,黑客提示十分明显. MySQL 中只剩下两个数据库,一个是information_schema,另一个是黑客创建的PLE ...

  3. 写完代码就去吃饺子|The 10th Henan Polytechnic University Programming Contest

    河南理工大学第十届校赛 很久没有组队打比赛了,好吧应该说很久没有写题了, 三个人一起玩果然比一个人玩有趣多了... 前100分钟过了4题,中途挂机100分钟也不知道什么原因,可能是因为到饭点太饿了?, ...

  4. promise和axios

    1.接口调用方式 原生ajax 基于jQuery的ajax fetch axios 异步 JavaScript的执行环境是「单线程」 所谓单线程,是指JS引擎中负责解释和执行JavaScript代码的 ...

  5. Privacy Violation 侵犯隐私

  6. Dynamic Code Evaluation:Code Injection 动态代码评估:代码注入

  7. 利用Fiddler对Jmeter的请求进行抓包

    前言 有时候,为了得到更详细的请求结果,我们可能需要使用Fiddler结合Jmeter来抓包分析,从而更好的辅助测试. 遇到的问题 这里以一个获取学生信息的接口为例进行说明. 当我在Jmeter里按接 ...

  8. YII2数据库操作出现类似Database Exception – yii\db\Exception SQLSTATE[HY000] [2002] No such file or director

    参考文章:https://blog.csdn.net/zqtsx/article/details/41845511 我的系统时Ubuntu18使用上面的方法时发现,没有MySQL.socket,然后谷 ...

  9. alpine制作jdk、jre镜像、自定义镜像上传阿里云

    alpine制作jdk镜像 alpine Linux简介 1.Alpine Linux是一个轻型Linux发行版,它不同于通常的Linux发行版,Alpine采用了musl libc 和 BusyBo ...

  10. spring的事物管理配置

    基于注解的事务管理器配置(AOP) 首先要引入AOP和TX的名称控件 <!-- 使用annotation定义事务 --> <tx:annotation-driven transact ...