Android应用的数据文件一般怎么存

水手丁 发布于 2016/07/11 18:53
阅读 415
收藏 1

新人入手开发Android游戏,关卡及进度配置文件,以文本文件格式存放,假设第一关game1.cfg,第二关game2.cfg,第三关gam3.cfg,以此类推....游戏进度保存在latest.cfg

R.1) 用户在安装APK时game1.cfg,game2.cfg......需要存进应用数据文件夹以便程序读取

R.2) 用户可以将当前游戏进度存档到应用数据文件夹的latest.cfg

这些文件应该是存储在安卓系统默认的/data/data/xxx.yyy.zzz/ 应用对应的数据目录下

研究一番安卓应用的数据存储,貌似有以下方案

S.1)为满足R.1,可以用assets文件,但是应用安装后assets文件并不存在于/data/data/xxx.yyy.zzz/ 目录中,(res/raw也是类似),后面的latest.cfg怎么写?assets文件被安卓系统具体存放到哪里去了?

S.2) 直接用FileOutputStream/FileInputStream去读写/data/data/xxx.yyy.zzz/ 内部存储?但是我初始随着APK一起发布的关卡配置文件game1.cfg,game2.cfg...如何安装到/data/data/xxx.yyy.zzz/目录下?


第一次写安卓应用,还请有经验的兄弟指教一下一般这种情形怎么处理?什么方案是最合理的?


加载中
0
eechen
eechen
应用安装后,你APK里的assets文件位于:
/data/app/com.example.appname.apk/assets
APK是ZIP格式,可以看做一个压缩文件系统.
你可以用AssetManager把里面的数据复制到你的应用目录里操作:
/data/data/com.example.appname

比如我这里把assets里的php目录复制到应用目录下:
String app_dir = "/data/data/" + getPackageName();
File php_dir = new File(app_dir+"/php/");
if(!php_dir.exists()) {
    copyFileOrDir("php", app_dir);
}

private void copyFile(String filename, String app_dir) {
    AssetManager assetManager = this.getAssets();
    InputStream in = null;
    OutputStream out = null;
    try {
        in = assetManager.open(filename);
        String newFileName = app_dir + "/" + filename;
        out = new FileOutputStream(newFileName);
        byte[] buffer = new byte[1024];
        int read;
        while ((read = in.read(buffer)) != -1) {
            out.write(buffer, 0, read);
        }
        in.close();
        in = null;
        out.flush();
        out.close();
        out = null;
    } catch (Exception e) {
        Log.e("PHPDroid", "copyFile");
    }
}

private void copyFileOrDir(String path, String app_dir) {
    AssetManager assetManager = this.getAssets();
    String assets[] = null;
    try {
        assets = assetManager.list(path);
        if (assets.length == 0) {
            copyFile(path, app_dir);
        } else {
            String fullPath = app_dir + "/" + path;
            File dir = new File(fullPath);
            if (!dir.exists()) { dir.mkdir(); }
            for (int i = 0; i < assets.length; ++i) {
                copyFileOrDir(path + "/" + assets[i], app_dir);
            }
        }
    } catch (Exception e) {
        Log.e("PHPDroid", "copyFileOrDir");
    }
}
0
菜鸟早起

可以放在assets目录下,应用启动初始化的时候,在从assets里复制到你想放的目录里,具体怎么操作assets目录,搜一下。

0
水手丁
水手丁

引用来自“菜鸟早起”的评论

可以放在assets目录下,应用启动初始化的时候,在从assets里复制到你想放的目录里,具体怎么操作assets目录,搜一下。

谢谢,那如果是只读的配置文件,我是不是可以就用AssetManager去访问就好了,因为Assets文件时和APK打包在一起安装的,不需要再复制到另外的目录? 
0
s
smilewsm2015

两种方式:

1、使用SharedPreferences

2、sqlite(推荐)

返回顶部
顶部