Android,将文件写入数据/数据/"包"文件夹的子目录的正确方法是什么



在过去的几天里,我一直在尝试找到将文件写入android数据文件夹子目录的正确方法。我找到的大多数答案都不清楚,或者没有以正确和有效的方式解决问题,所以我最终决定问。我为用户提供了在我的服务器上备份他数据的可能性,基本上是通过 php 脚本将数据库上传到服务器。数据库位于

'/data/data/com.package/databases/data.db'

此处的问题是当用户想要重新加载备份的数据库时。应用程序下载该文件,然后应将其写入(覆盖旧文件)到/databases/data.db' 文件中,然后重新加载。我已经设法让一切正常工作,直到我必须写入下载的文件,因为 FileOutputStream 抛出一个非法的参数异常,说我不能在路径中使用路径分隔符。我知道FileOutputStream只能写入数据文件夹的第一级,而不能写入子目录。如何做到这一点?如果做不到,有没有办法将默认数据库路径设置为"data"目录的第一级来解决这个问题?如果这是对我想要获得的东西的完全错误的方法,我愿意接受批评,但得到答案仍然很好,只是为了将来知道。

public void aSyncDatabaseDownloadFileFinish(PhpWrapper feed) {
    if (validateServerResponse(feed.Result)) {
        // Copy Database to Directory
        try {
            FileOutputStream fos = ctx.openFileOutput(ctx.getDatabasePath(DataDatabaseHelper.DBNAME).getAbsolutePath(),
                    Context.MODE_PRIVATE);
            fos.write(feed.DownloadedBytes, 0, feed.DownloadedBytes.length);
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    else
        Toast.makeText(ctx, ctx.getResources().getString(R.string.nofilesonserver), Toast.LENGTH_SHORT).show();
}

提前谢谢。

如何做到这一点?

在你的情况下,请使用getDatabasePath()将文件写入应用数据库的标准位置。

无论您的路径分隔符问题如何,openFileOutput()都将处理内部存储中的files/目录,而不是databases/目录。

好的,多亏了Squonk,我得到了答案,仍然不敢相信事情就这么简单。对于任何有相同问题的人,这里有一个例子:

if (validateServerResponse(feed.Result)) {
        // Copy Database to Directory
        try {
             // This Solved the Exception
            FileOutputStream fos = new FileOutputStream(ctx.getDatabasePath(DataDatabaseHelper.DBNAME), true);
            fos.write(feed.DownloadedBytes, 0, feed.DownloadedBytes.length);
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    else
        Toast.makeText(ctx, ctx.getResources().getString(R.string.nofilesonserver), Toast.LENGTH_SHORT).show();

谢谢斯昆克!

相关内容

  • 没有找到相关文章

最新更新