【发布时间】:2012-10-22 11:59:32
【问题描述】:
我正在使用下面的代码将我的数据库复制到内部存储,但它并没有帮助我,而且总是出现这个错误。我经历了很多问题和答案,并尝试了很多博客文章,但无法使其发挥作用。我的手机是 HTC One X
我还在清单文件中添加了一项权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
public static boolean backUpDataBase(Context context)
{
String packageName = "com.projectWork.mobile";
try {
File sd = Environment.getExternalStorageDirectory();
File data = Environment.getDataDirectory();
if (Environment.MEDIA_MOUNTED.equals(sd))
{
String currentDBPath = "//data//"+ packageName +"//databases//"+"appDb.db";
String backupDBPath = "appDb.db";
File currentDB = new File(data, currentDBPath);
File backupDB = new File(sd, backupDBPath);
FileChannel src = new FileInputStream(currentDB).getChannel();
FileChannel dst = new FileOutputStream(backupDB).getChannel();
dst.transferFrom(src, 0, src.size());
src.close();
dst.close();
Toast.makeText(context, backupDB.toString(), Toast.LENGTH_LONG).show();
}
} catch (Exception e) {
Toast.makeText(context, e.toString(), Toast.LENGTH_LONG).show();
}
return true;
}
这是我遇到的错误
java.io.FileNotFoundException:/mnt/sdcard/appDb.db:打开失败: EROFS(只读文件系统)
请指导,因为我想将所有错误都存储在数据库中,以便我们以后分析。
谢谢
【问题讨论】:
-
为什么是双 '//' ?错误来自您的 sdcard 被安装为只读,看起来。我不确定那个 FileChannel 的事情。也许普通的文件输入/输出流会更好?
-
你是对的,当我尝试将文件写入 sd 卡时出现问题,然后它显示只读错误。 ...请建议。我的手机没有植根,我也不想这样做
-
首先尝试在 sdcard 上创建一个写入文件。这可能是一些愚蠢的事情,比如 sdcard 被锁定了。
-
njzk2,谢谢它的工作。
标签: android android-intent android-sdcard android-sqlite