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

标签 android database fileoutputstream illegalargumentexception path-separator

过去几天我一直在尝试找到将文件写入 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();
}

提前致谢。

最佳答案

How can this be done?

在你的例子中,use getDatabasePath()将文件写入应用程序数据库的标准位置。

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

关于Android,将文件写入数据/数据/'package'文件夹的子目录的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29084243/

相关文章:

java - 成员构造函数中引用 "this"

java - 多线程只写一个输出流并且数据丢失

php - 设计连接到数据库的应用程序

java - 登录 Servlet 直接变为 False

database - 在 SQL Server 中存储图像

java - 无法将 Jar 文件的内容写入 Tomcat 7.0.22 上的本地 Servlet

java - 如何在客户端-服务器应用程序中解决此 SocketException?

java - 更改小数点分隔符

android - FLAG_SECURE 不适用于样式为 DialogFragment.STYLE_NO_TITLE 的 DialogFragment

android - 如何在未显示上下文菜单时停止将长按作为短按处理