复制的android db文件为空

时间:2011-08-22 19:28:58

标签: java android

我正在尝试将我的应用程序文件夹中的android db文件复制到SD卡上的另一个文件。从DDMS文件资源管理器我可以注意到复制的文件大小为0.这是我的代码。

public boolean copyDBFile(){
    File dbFile =new File(Environment.getDataDirectory() + DB_PATH);
    File exportDir = new File(Environment.getExternalStorageDirectory()
      + "/BACKUP_DIR");
    if (!exportDir.exists()) {
        exportDir.mkdirs();
    }

    File file = new File(exportDir, dbFile.getName());
    try {
        file.createNewFile();           
        copyFile(dbFile, file);
        return true;
    } catch (IOException e) {     
        return false;
    }
}


public void copyFile(File src, File dst) throws IOException {
    FileChannel inChannel = new FileInputStream(src).getChannel();
    FileChannel outChannel = new FileOutputStream(dst).getChannel();

    try {
        inChannel.transferTo(0, inChannel.size(), outChannel);
    } finally {
        if (inChannel != null)
          inChannel.close();
        if (outChannel != null)
          outChannel.close();
    }
}

是权限问题吗?谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

@piyush 感谢try / catch通知。我在catch块中的boolean copyDBFile()方法中添加日志跟踪后发现了错误。

public boolean copyDBFile(){
File dbFile =new File(Environment.getDataDirectory() + DB_PATH);
File exportDir = new File(Environment.getExternalStorageDirectory()
  + "/BACKUP_DIR");
if (!exportDir.exists()) {
    exportDir.mkdirs();
}

File file = new File(exportDir, dbFile.getName());
try {
    file.createNewFile();           
    copyFile(dbFile, file);
    return true;
} catch (IOException e) {  
    Log.e("Sarelo", "Error creating file", e);
    return false;
}

}

我的DB_PATH已设置为/data/data/package/databases/data.db并已将Environment.getDataDirectory()结果添加到dbFile /data/data/data/package/databases/data.db 那是个大错!谢谢大家的帮助:)

答案 1 :(得分:0)

在使用outChannel.force(true);

之前尝试使用transferTo(...);