在打包的Android应用程序中存储xml更新的位置?

时间:2012-07-04 05:51:22

标签: android android-emulator filesystems

我想我对文件如何存储在实际机器(或模拟器)上有点困惑。

编程时,我可以手动将我的xml文件保存在assets文件夹中,但是如何编写一个必须连接到网络并下载文件的应用程序,将其保存在某处然后操作它?它将存储所述文件的位置?

我想创建一个新文件,但我在另一篇文章中读到,资产文件夹一旦打包就不可用;那么他们在哪里创建和存储?他们怎么可以转移。它只是,我是这个平台的新手,文件系统有点令人困惑。

3 个答案:

答案 0 :(得分:0)

如果要使用已更新的XML,则应考虑将文件从资产复制到设备存储。您可以查看How to copy files from 'assets' folder to sdcard?以了解如何做到这一点。

另一种方法是使用数据库,您可以在其中存储XML中的已解析数据。这样,无论何时需要访问内容,都无需解析文件。

答案 1 :(得分:0)

您有两种选择:从您的活动中调用getFilesDir()以获取只能从您的应用程序读取/写入的内部数据文件夹的路径。

或者,您可以将xml文件写入/读取到外部存储器(SD卡)。使用Environment.getExternalStorageDirectory()方法获取外部存储的根路径,然后根据需要创建自己的文件夹。

请注意,如果您写入外部存储空间,手机中的每个应用都可以访问它。

答案 2 :(得分:0)

即使我遇到了这个问题。现在我有一个xml文件,它有应用程序属性。这是打包在assets文件夹中。一旦打包我们就无法编辑assets文件夹中的文件。 现在,在应用程序加载时,我只是将此文件复制到

返回的路径
context.getFilesDir().getAbsolutePath();

应用程序从同一个地方编辑它。您可以在 DDMS 视图的 FileExplorer 面板中查看是否修改了该文件。该文件存储在名为与应用程序包名称相同的文件夹中,例如:com.abhi.maps

或者您也可以将其复制到SD卡。但是它有风险,因为SD卡可能一直可用。

您可以使用以下代码从资源文件夹中复制文件:

    private static void copyFile(String filename, Context context) {
    AssetManager assetManager = context.getAssets();

    InputStream in = null;
    OutputStream out = null;
    try {
        in = assetManager.open(filename);
        String newFileName = context.getFilesDir() + "/" + 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("tag", e.getMessage());
    }

}

希望它有所帮助! :)