我正在尝试将我的应用程序文件夹中的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();
}
}
是权限问题吗?谢谢你的帮助。
答案 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(...);