我写了下面的方法将我的备份文件复制到外部存储
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!我怎么解决这个问题?
提前致谢
答案 0 :(得分:1)
尝试:
String dbPath = context.getApplicationInfo().dataDir + File.separator
+ "databases" + File.separator + "TestDB";
而不是使用//
,请尝试File.separator
。
答案 1 :(得分:0)
您的dbPath变量已经是完整的绝对路径名,因此不能与引用您的数据目录的File对象结合使用,而只能与其自身一起使用。无论如何,你通过做出糟糕的假设来获得完整的路径名称。
您应该做的是获取一个代表数据目录的文件,并将其与仅包含文件名(在其中)的字符串结合使用,而不是绝对目录路径。
如果您确定要在数据目录下创建目录,则可以这样做,但必须确保它们存在或创建它们。