当前位置:首页 » 安卓系统 » androidassets文件拷贝

androidassets文件拷贝

发布时间: 2025-03-17 22:46:53

‘壹’ 如何获取android assets文件下的mp4

assets文件夹是android程序中存放相关外部文件的一个目录,Android官方提供了相应的方法去访问该文件夹中的内容,故此我们并不需要进行相关的路径判断等代码操作,直接调用相关方法打开文件并得到一个字节输入流(InputStream);
然后通过相应的字符编码方式读取字节解码为字符输入流(InputStreamReader);再通过BufferReader对字符输入流读取文本并将字符存入缓冲区以便能提供字符、数组和线段的高效读取;最后我们就能逐行对文件内容进行读取了;
public class MainActivity extends Activity {

‘贰’ Android中assets目录和raw目录的区别和使用情况

今天看到有人问Android中assets目录和raw目录的区别和使用情况。

能提出这个问题的,应该都了解它们的共同点:

它们会被原封不动的拷贝到APK中,而不会像其它资源文件那样被编译成二进制的形式。

要说区别,当然最直观的就是获取它们的InputStream的API不一样了。

assets:InputStream assets = getAssets().open("xxxx");

raw:InputStream raw = getResources().openRawResource(R.raw.xxxx)

有人可能会有疑问,既然它们都是被原封不动的拷贝到APK中,而assets可以创建目录结构,又能够动态的列出assets中的所有资源getAssets().list(String path);,这些raw都做不到,那raw还有什么用呢?

下面我们来说说它们主要的区别:

由 于raw是Resources (res)的子目录,Android会自动的为这目录中的所有资源文件生成一个ID,这个ID会被存储在R类当中,作为一个文件的引用。这意味着这个资源 文件可以很容易的被Android的类和方法访问到,甚至在Android XML文件中你也可以@raw/的形式引用到它。在Android中,使用ID是访问一个文件最快捷的方式。MP3和Ogg文件放在这个目录下是比较合适 的。
assets目录更像一个附录类型的目录,Android不会为这个目录中的文件生成ID并保存在R类当中,因此它与 Android中的一些类和方法兼容度更低。同时,由于你需要一个字符串路径来获取这个目录下的文件描述符,访问的速度会更慢。但是把一些文件放在这个目 录下会使一些操作更加方便,比方说拷贝一个数据库文件到系统内存中。要注意的是,你无法在Android XML文件中引用到assets目录下的文件,只能通过AssetManager来访问这些文件。数据库文件和游戏数据等放在这个目录下是比较合适的。
另 外,网上关于assets和raw的资料都千篇一律了,因此关于这两者中单个文件大小不能超过1M的**错误**描述也在传播,即如果读取超过1M的文件 会报"Data exceeds UNCOMPRESS_DATA_MAX (1314625 vs 1048576)"的IOException,还引申出种种解决方案。个人认为不应该有这样的限制,为了验证这个说法写了个Demo,发现将近5M的压缩 包在assets和raw中都能正常访问,因此在这里纠正一下,理论上只要打包不超过Android APK 50M大小的限制都是没有问题的。当然了,不排除是Android很早期的时候因为设备硬件原因aapt在编译的时候对这两个文件夹大小做出了限制,如果 是这样,较新版的ADT应该不会出现这种情况。

更新:为了验证我最后一段的描述,避免导致结果误 导,晚上写了几个小Demo验证之后又花了点时间查阅了一些资料,最后找到这篇文章http://ponystyle.com/blog/2010/03 /26/dealing-with-asset-compression-in-android-apps/ ,文章比较简单清晰,我就不翻译了。这篇文章应该还蛮有说服力的,从根本上说明了当时Android2.3以前产生资源文件单个文件大小不能超过1M的原 因和部分解决方法。不过由于限制是当时的aapt决定的,现在已经更新了多个版本的aapt已经不存在这种问题了,也印证了我最后一段的猜想。

‘叁’ Android读取assets目录下的视屏资源

在Android
应用中使用assets目录下存放的
资源文件
,assets目录下存放的资源代表应用无法直接访问的原生资源,应用程序通过AssetManager以二进制流的形式来读取资源。

‘肆’ android assets文件占内存吗

android assets的文件夹会占用文件大小的,一般都不允许超过1M,可以通过如下方式解决:
比如在assets目录下放置了一个“test.zip”的资源。当apk安装之后,可能我就需要访问这个"test.zip"资源文件。(可能我会去解压到某处)
在网上找了很长时间,说什么在assets下的资源怎么怎么不能超过1M、或者要分成多个不超过1M的小文件,然后用的时候在拼成一个大文件、说什么要用到什么数据库。总之说的,感觉没有一个有用的。
于是自己就实现了一个从assets下拷贝资源到sd卡中的一个功能。这里不限制非得拷贝到sd卡中。
之所以要拷贝出来,是因为在assets内的资源随apk安装之后,不好访问。所以想拷贝到一个容易访问的地方。比如是一个assets下的是一个zip文件,为需要在安装之后进行解压。而解压的时候我又想使用 ant.jar (支持编码) 。于是我先将zip资源拷贝到一个地方,然后在进行解压。

‘伍’ Android开发问题怎么解决

  1. R.java消失或解析异常

  2. 自定义title栏

  3. SQLite isFirst和isBeforeFirst方法的区别

  4. eclipse删除空行

  5. getX()和getRawX()的区别

  6. imagView居中显示问题

  7. synchronized引发了 java.util.

  8. 获取随机颜色

  9. 去掉Activity的标题栏,全屏显示

  10. 如何修改应用名称及应用图标

  11. 关于调试方法

  12. Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.

  13. android.content.res.Resources.loadXmlResourceParser

  14. android.content.res.Resources$NotFoundException

  15. 交互性的button定义的方法

  16. 在超级终端中执行程序报错-Permission deny

  17. 从svn导入工程项目有惊叹号

  18. 从svn导入工程项目有惊叹号

  19. 首次进入带有EditText的Activity不自动弹出软键盘,再次点击才弹

  20. Gallery中OnItemClickListener与OnItemSelectedListener的区别

  21. Eclipse中签名导出apk崩溃,手动签名

  22. android.view.InflateException: Binary XML file line #异常的解决

  23. 将assets文件夹中的压缩包拷贝到sdcard中(不限大小)

  24. 判断是否有root权限

  25. 最简单的Root 模拟器的方法

  26. 新版ADT开启eclipse提示 "Running Android Lint" has encountered a problem

  27. 新版ADT开启eclipse提示cannot open libstdc++.so.6..

  28. 无法升级ADT

‘陆’ Android assets文件夹

assets目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制,assets目录下可以再建立文件夹,assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类

‘柒’ 如何打开assets文件夹中的apk

在自己的app中安装assets目录下的apk文件的方法:

详细过程如下:

{

ContextmContext;

@Override

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mContext=this;

//Toast.makeText(this,""+Environment.getExternalStorageDirectory().getAbsolutePath(),0).show();

if(ApkFromAssets(this,"test.apk",Environment.getExternalStorageDirectory().getAbsolutePath()+"/test.apk")){

Builderm=newAlertDialog.Builder(mContext)

.setIcon(R.drawable.ic_launcher).setMessage("是否安装?")

.setIcon(R.drawable.ic_launcher)

.setPositiveButton("yes",newOnClickListener(){

@Override

publicvoidonClick(DialogInterfacedialog,intwhich){

Intentintent=newIntent(Intent.ACTION_VIEW);

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

intent.setDataAndType(Uri.parse("file://"+Environment.getExternalStorageDirectory().getAbsolutePath()+"/test.apk"),

"application/vnd.android.package-archive");

mContext.startActivity(intent);

}

});

m.show();

}

}

publicbooleanApkFromAssets(Contextcontext,StringfileName,Stringpath){

booleanIsFinish=false;

try{

InputStreamis=context.getAssets().open(fileName);

Filefile=newFile(path);

file.createNewFile();

FileOutputStreamfos=newFileOutputStream(file);

byte[]temp=newbyte[1024];

inti=0;

while((i=is.read(temp))>0){

fos.write(temp,0,i);

}

fos.close();

is.close();

IsFinish=true;

}catch(IOExceptione){

e.printStackTrace();

}

returnIsFinish;

}

}

‘捌’ android 百度地图离线地图包怎么用

1.首先把离线地图放在android工程下的assets里面。
注意:建议离线地图下载通过网络地图APIDEMO去下载,因为到官网上下载的离线地图文件格式不一样,APIDEMO的格式是.dat,而官网上的格式是.dat_svc有可能加载不了地图.
2.把离线地图从assets下拷贝到sd卡下
public static void (Context context) {
try {
String filepath = Environment.getExternalStorageDirectory() + "/"
+ "BaiMapSDK" + "/" + "vmp" + "/" + "h" + "/"
+ "xxxxx.dat";
String path = Environment.getExternalStorageDirectory() + "/"
+ "BaiMapSDK" + "/" + "vmp" + "/" + "h" + "/";
File file = new File(path);
if (!file.exists()) {
file.mkdir();
}
if (!(new File(filepath)).exists()) {
new File(filepath).createNewFile();
InputStream is = context.getAssets().open(
"xxxx.dat");
FileOutputStream fos = new FileOutputStream(filepath);
byte[] buffer = new byte[8192];
int count = 0;
while ((count = is.read(buffer)) > 0) {
fos.write(buffer, 0, count);
}
fos.close();
is.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
3.初始化离线地图
private MKOfflineMap mOffline = null;
MapController mMapController;
mMapController = mMapView.getController();
mOffline = new MKOfflineMap();
mOffline.init(mMapController, new MKOfflineMapListener() {
@Override
public void onGetOfflineMapState(int type, int state) {
// TODO Auto-generated method stub
switch (type) {
case MKOfflineMap.TYPE_DOWNLOAD_UPDATE: {
}
break;
case MKOfflineMap.TYPE_NEW_OFFLINE:
break;
case MKOfflineMap.TYPE_VER_UPDATE:
break;
}
}
});

‘玖’ android 怎么读取res下的xml

相当于读取res下面的文件,读取成string类型,然后在通过xml解析器解析就行。下面是读取res下面文件的例子,请看截图,例子来自android学习手册,android学习手册,里面有源码。android学习手册包含9个章节,108个例子,源码文档随便看,例子都是可交互,可运行,源码采用android studio目录结构,高亮显示代码,文档都采用文档结构图显示,可以快速定位。360手机助手中下载,图标上有贝壳

方法一、将要读取的txt文件拷贝到Android工程目录下的assets文件夹下

方法二、在res文件夹下新建raw文件夹,将txt拷贝到该目录下


本方法是从assets中读取


/**
* 从assets中读取txt
*/
private void readFromAssets() {
try {
InputStream is = getAssets().open("qq.txt");
String text = readTextFromSDcard(is);
textView.setText(text);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}



本方法是从raw中读取


/**
* 从raw中读取txt
*/
private void readFromRaw() {
try {
InputStream is = getResources().openRawResource(R.raw.qq);
String text = readTextFromSDcard(is);
textView.setText(text);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

本方法是解析输入流,返回txt中的字符串



/**
* 按行读取txt
*
* @param is
* @return
* @throws Exception
*/
private String readTextFromSDcard(InputStream is) throws Exception {
InputStreamReader reader = new InputStreamReader(is);
BufferedReader bufferedReader = new BufferedReader(reader);
StringBuffer buffer = new StringBuffer("");
String str;
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
buffer.append(" ");
}
return buffer.toString();
}


热点内容
js文件拒绝访问 发布:2025-03-18 04:26:36 浏览:703
安卓系统怎么恢复聊天记录 发布:2025-03-18 04:24:57 浏览:595
怎么把安卓手机app转到苹果手机 发布:2025-03-18 04:20:30 浏览:966
分算法适用于 发布:2025-03-18 04:17:08 浏览:626
mysql数据库连接串 发布:2025-03-18 04:15:51 浏览:13
社会脚本法定义 发布:2025-03-18 03:59:00 浏览:326
安卓扩展存储空间 发布:2025-03-18 03:57:34 浏览:10
linuxat没反应 发布:2025-03-18 03:56:51 浏览:581
怎么看是多少位编译器 发布:2025-03-18 03:47:32 浏览:660
solr索引存储 发布:2025-03-18 03:46:52 浏览:330