如何将文件打包在/data/data/PackageName/files 文件夹内,如何突破UNCOMPRESS_DATA_MAX 的限制
来源:互联网 发布:linux创建svn版本库 编辑:程序博客网 时间:2024/05/16 18:39
android可供打包的资源文件,在项目开发时有:assets,不过据说不能写入。
如果希望将需要用到的文件打入apk,比如SQLite的db文件,现在的方法是,在项目中,把文件先存在assets里,然后在程序第一次启动时,将assets中的文件拷贝到/data/data中。
需要注意的是,如果直接使用db做为文件后缀,在拷贝大于1M的文件时时将会出现:
DEBUG/asset(725): Data exceeds UNCOMPRESS_DATA_MAX (1662976 vs 1048576)出现这个问题的原因是,assetsManager 无法处理大于1M的文件的压缩和解压。但以下文件类型,因为是已经压缩过的,不会进行压缩处理,如下:/* these formats are already compressed, or don't compress well */static const char* kNoCompressExt[] = { ".jpg", ".jpeg", ".png", ".gif", ".wav", ".mp2", ".mp3", ".ogg", ".aac", ".mpg", ".mpeg", ".mid", ".midi", ".smf", ".jet", ".rtttl", ".imy", ".xmf", ".mp4", ".m4a", ".m4v", ".3gp", ".3gpp", ".3g2", ".3gpp2", ".amr", ".awb", ".wma", ".wmv"};
参考:http://ponystyle.com/blog/2010/03/26/dealing-with-asset-compression-in-android-apps/
所以,现在的思路是:将Sqlite db文件,先改名为.jpg文件,放在assets中,然后在程序第一次启动时,改名拷贝到/data/data中。
参考代码如下:
import android.content.Context;
import android.content.res.AssetManager;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.util.Log;
public class InitResources {
private Context _context;
public InitResources(Context context) {
_context = context;
}
public void CopyAssets(String dirname, String renFrom, String renTo) {
AssetManager assetManager = _context.getAssets();
String[] files = null;
try {
files = assetManager.list(dirname);
} catch (IOException e) {
Log.e("tag", e.getMessage());
}
InputStream in = null;
OutputStream out = null;
for(int i=0; i<files.length; i++) {
try {
in = assetManager.open(dirname + "/" + files[i]);
out = new FileOutputStream(_context.getFilesDir().getAbsolutePath() +"/"+ rename(files[i],renFrom,renTo));
copyFile(in, out);
in.close();
in = null;
out.flush();
out.close();
out = null;
} catch(IOException e) {
Log.e("tag",files[i]);
Log.e("tag",e.toString());
}
}
}
private void copyFile(InputStream in, OutputStream out) throws IOException {
byte[] buffer = new byte[1024];
int read;
while((read = in.read(buffer)) != -1){
out.write(buffer, 0, read);
}
}
private String rename(String filename,String renFrom,String renTo)
{
return filename.replaceAll(renFrom,renTo);
}
}
- 如何将文件打包在/data/data/PackageName/files 文件夹内,如何突破UNCOMPRESS_DATA_MAX 的限制
- 如何写文件到/data/data/packagename/files中
- 下载apk文件在/data/data/packagename/files/目录下,如何安装成功
- 下载apk文件在/data/data/packagename/files/目录下,如何安装成功
- 下载apk文件在/data/data/packagename/目录下,如何安装成功
- 对 data/data/ packagename/ files 下文件操作
- 如何将一个data文件变成.o
- android 将数据缓存在文件中,放在/data/data/<package name>/files目录下
- 在linux下如何将文件夹打包
- 在linux下如何将文件夹打包
- 在linux下如何将文件夹打包
- 在linux下如何将文件夹打包
- 在linux下如何将文件夹打包
- 在linux下如何将文件夹打包
- 在linux下如何将文件夹打包
- 在linux下如何将文件夹打包
- 在linux下如何将文件夹打包
- 如何查看Windows2008的Application Data文件夹
- 数组公式基本功修炼之数组扩充
- sigslot简介
- 乐phone 虚拟home按键
- Flash声音控制详解
- 需要HTTP鉴权的URL请求
- 如何将文件打包在/data/data/PackageName/files 文件夹内,如何突破UNCOMPRESS_DATA_MAX 的限制
- 一个很简单脚本
- 从零创建最简单的 ogre 程序
- POST方法传递参数,返回过期解决方法
- android调用系统应用
- 解决chrome document.documentElement.scrollTop问题
- Doug Lea的malloc
- 實施顧問轉入企業后的几點感悟
- 解决mount.nfs:access denied by server while mounting