我发现了一个甜心功能,可以将我的数据库文件从原始路径复制到外部存储卡:
public static void copyFile(File src, File dst) throws IOException {
if(!dst.exists()) {
dst.createNewFile();
}
else{
dst.delete();
dst.createNewFile();
}
InputStream in = new FileInputStream(src);
try {
OutputStream out = new FileOutputStream(dst);
try {
// Transfer bytes from in to out
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
} finally {
out.close();
}
} finally {
in.close();
}
}
但是我无法调用该函数,这里我的代码只需一个简单的按钮:
exportDatabase.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(Info.this, getDatabasePath(Info.this, "Library.sqlite"), Toast.LENGTH_SHORT).show();
File srcFile = new File(getDatabasePath(Info.this, "Library.sqlite"));
File dstFile = new File((getExternalStorageDirectory() + "/Library.sqlite"));
copyFile(srcFile, dstFile);
}
});
这行代码copyFile(srcFile, dstFile);
被标记为错误。鼠标悬停时,我收到一个Unhandled Exeption:java.IO.IOExeption
如何正确调用?
编辑: 要完成缺失的代码,请按下按钮中使用的函数:
public String getDatabasePath(Context context,String databaseName)
{
return context.getDatabasePath(databaseName).getAbsolutePath();
}
public String getExternalStorageDirectory() {
String externalStorageDirectory;
externalStorageDirectory = Environment.getExternalStorageDirectory().toString();
return externalStorageDirectory;
}
我刚刚在Memu(android模拟器)中测试了我的解决方案,那个代码摇滚!我现在能够备份和恢复我的SQLite数据库。 (恢复简单的反转dst和src文件路径)。希望这会有所帮助。谢谢大家。
答案 0 :(得分:2)
这行代码copyFile(srcFile,dstFile);被标记为错误。鼠标悬停时,我收到一个Unhandled Exeption:java.IO.IOExeption
是的,它的行为符合预期。
因为您的 copy()
方法可能会抛出java.IO.IOExeption
请在此处阅读What throws an IOException
您需要try-catch
发声处理Exception
试试这个
try {
copy(srcFile, dstFile);
} catch (IOException e) {
e.printStackTrace();
}
答案 1 :(得分:1)
您没有处理可能的Exception
。将它包裹在试一试中,例如
try {
copyFile(srcFile, dstFile);
} catch (IOException e) {
// handle it
}
答案 2 :(得分:1)
既然你说throws IOException
,
你应该使用catch来捕获异常。即将您的代码包装在tr-catch块中,如下所示
try{
copyFile(srcFile, dstFile);
}
catch(IOException e){
e.printStackTrace();
}