【发布时间】:2015-01-18 23:38:34
【问题描述】:
我已经针对同一个问题查看并尝试了十几个答案,但我没有运气。
我是 Android 开发的新手,但来自 Java / C# 背景,我很确定,我想做的不是火箭科学。
不幸的是,我无法根我正在使用的设备,所以请不要围绕根,我只需要,正如标题所示,将文件从 /assets/ 文件夹复制到我设备上的 /data/data/ 目录.
这里是我正在使用的一段代码:
private void copyDatabase(File dbFile) throws IOException {
InputStream is = context.getAssets().open(DB_NAME);
OutputStream os = new FileOutputStream(dbFile);
byte[] buffer = new byte[1024];
while (is.read(buffer) > 0) {
os.write(buffer);
}
os.flush();
os.close();
is.close();
}
这真的很简单,我有一个名为 DB_NAME 的静态字段,它指向 assets 文件夹。调试这一行,证明需要的文件被识别并成功输出到内存。
失败的行是下一行:... new FileOutputStream(dbFile); 我从另一个方法传入的。
dbFile的构造如下:
File dbFile = context.getDatabasePath(DB_NAME);
再一次,没什么特别的。这会获取当前上下文(应用程序)的数据库路径并将数据库的名称附加到该路径,因此为了论证,我们有,
/data/data/co.za.simple.sqlite/database/sqlitedb.db
错误消息是文件或目录不存在,这很好,对于任何将要下载应用程序的普通用户首次加载,现在,FileOutputStream(string) 的默认行为,据我所知是如果它不存在,它将创建它。
如前所述,第一次运行时,此文件不存在,但它给了我一个错误,提示找不到文件或目录。这让我相信实际的错误是应用程序没有写入 /data/ 目录的权限,所以我添加了我在列表中看到的唯一权限,适用于写入存储:
android.permission.WRITE_EXTERNAL_STORAGE
然而这完全没有效果。
如上所述,我无法根植此设备,现在也不想根植。
关于完全相同的问题,我浏览了无数博客、youtube 视图甚至这里的帖子,但这些解决方案都不适用。
我错过了什么吗?
【问题讨论】:
标签: android file-permissions copy-paste