复制文件?

时间:2018-04-23 09:50:29

标签: android file io copy

我发现了一个甜心功能,可以将我的数据库文件从原始路径复制到外部存储卡:

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文件路径)。希望这会有所帮助。谢谢大家。

3 个答案:

答案 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();
}