我想复制文件时FileNotFoundException

时间:2014-10-26 14:26:54

标签: android copy

我写了下面的方法将我的备份文件复制到外部存储

public Boolean Backup() {
    try {
        if (Environment.getExternalStorageState().equals(
                Environment.MEDIA_MOUNTED)) {

            File sd = Environment.getExternalStoragePublicDirectory("");

            File data = Environment.getDataDirectory();

            String dbPath = "//data//" + "com.example.sqlitetest"
                    + "//databases//" + "TestDB";

            // Backup file name
            Calendar calendar = Calendar.getInstance();
            String backupName = calendar.get(Calendar.YEAR) + "-"
                    + (calendar.get(Calendar.MONTH) + 1) + "-"
                    + calendar.get(Calendar.DAY_OF_MONTH) + "-"
                    + calendar.get(Calendar.HOUR_OF_DAY) + ":"
                    + calendar.get(Calendar.MINUTE) + ":"
                    + calendar.get(Calendar.SECOND);

            String backupPath = "//BackupFiles";

            File db = new File(data, dbPath);

            File backup = new File(sd + backupPath, backupName);

            if (!backup.exists())
                backup.mkdirs();

            FileChannel src = new FileInputStream(db).getChannel();
            FileChannel dest = new FileOutputStream(backup).getChannel();

            dest.transferFrom(src, 0, src.size());
            src.close();
            dest.close();

            return true;
        } else
            return false;

    } catch (Exception e) {

        e.printStackTrace();

        return false;
    }
}

我添加了写入和读取外部存储的权限。创建目标文件夹(sd + backupPath)但文件号为no并抛出FileNotFoundException!我怎么解决这个问题?

提前致谢

2 个答案:

答案 0 :(得分:1)

尝试:

String dbPath = context.getApplicationInfo().dataDir + File.separator
                    + "databases" + File.separator + "TestDB";

而不是使用//,请尝试File.separator

答案 1 :(得分:0)

您的dbPath变量已经是完整的绝对路径名,因此不能与引用您的数据目录的File对象结合使用,而只能与其自身一起使用。无论如何,你通过做出糟糕的假设来获得完整的路径名称。

您应该做的是获取一个代表数据目录的文件,并将其与仅包含文件名(在其中)的字符串结合使用,而不是绝对目录路径。

如果您确定要在数据目录下创建目录,则可以这样做,但必须确保它们存在或创建它们。