我找到了tutorial,它将数据库作为备份复制到文件夹,并将其作为还原复制回应用程序的数据库文件夹。几乎所有东西都工作正常,除了一件事:当我从我的文件夹中删除备份的.db文件并单击我的应用程序中的恢复它查找文件,找不到它,然后它什么都没有覆盖整个数据库。这就像我清空了整个数据库。
备份:
try {
InputStream myInput;
OutputStream myOutput;
myInput = new FileInputStream("/data/data/com.me.myapp/databases/HotOrNotdbLists2");//this is
// the path for all apps
//insert your package instead packagename,ex:com.mybusiness.myapp
// Set the output folder on the SDcard
File directory = new File("/sdcard/MyApp/");
// Create the folder if it doesn't exist:
if (!directory.exists())
{
directory.mkdirs();
}
// Set the output file stream up:
myOutput = new FileOutputStream(directory.getPath()+
"/myapp.db");
// Transfer bytes from the input file to the output file
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer))>0)
{
myOutput.write(buffer, 0, length);
}
// Close and clear the streams
myOutput.flush();
myOutput.close();
myInput.close();
Toast.makeText(Settings.this, "Backup done successfully!", Toast.LENGTH_LONG).show();
} catch (FileNotFoundException e) {
Toast.makeText(Settings.this, "Backup unsuccessful! File cannot be created! Directory does not exist?", Toast.LENGTH_LONG).show();
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
Toast.makeText(Settings.this, "Backup unsuccessful!", Toast.LENGTH_LONG).show();
// TODO Auto-generated catch block
e.printStackTrace();
}
还原:
OutputStream myOutput;
try {
myOutput = new FileOutputStream("/data/data/com.me.myapp/databases/HotOrNotdbLists2");
// Set the folder on the SDcard
File directory = new File("/sdcard/MyApp/");
// Set the input file stream up:
InputStream myInputs = new FileInputStream(directory.getPath()+ "/myapp.db");
// Transfer bytes from the input file to the output file
byte[] buffer = new byte[1024];
int length;
while ((length = myInputs.read(buffer))>0)
{
myOutput.write(buffer, 0, length);
}
// Close and clear the streams
myOutput.flush();
myOutput.close();
myInputs.close();
Toast.makeText(Settings.this, "Restore done successfully!", Toast.LENGTH_SHORT).show();
} catch (FileNotFoundException e) {
Toast.makeText(Settings.this, "Restore unsuccessful! File not found! Directory does not exist?", Toast.LENGTH_LONG).show();
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) { Toast.makeText(Settings.this, "Restore unsuccessful!",
Toast.LENGTH_SHORT).show();
// TODO Auto-generated catch block
e.printStackTrace();
}
修改: 我添加了Jason的答案,它仍然清除了数据库,即使我将 false 发送到directoryB并让恢复失败!文件未找到!目录/文件不存在?消息???!?!
try {
OutputStream myOutput;
myOutput = new FileOutputStream("/data/data/com.me.myapp/databases/HotOrNotdbLists2");
// Set the folder on the SDcard
File directory = new File("/sdcard/MyApp/");
boolean directoryB = new File("/sdcard/MyApp/", "/myapp.db").exists();
Toast.makeText(Settings.this, "directoryB: " + directoryB, Toast.LENGTH_SHORT).show();
if (directoryB == true)
{
Toast.makeText(Settings.this, "File exists!", Toast.LENGTH_SHORT).show();
// Set the input file stream up:
InputStream myInputs = new FileInputStream(directory.getPath()+ "/myapp.db");
// Transfer bytes from the input file to the output file
byte[] buffer = new byte[1024];
int length;
while ((length = myInputs.read(buffer))>0)
{
myOutput.write(buffer, 0, length);
}
// Close and clear the streams
myOutput.flush();
myOutput.close();
myInputs.close();
Toast.makeText(Settings.this, "Restore done successfully!", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(Settings.this, "Restore unsuccessful! File not found! Directory/file does not exist?", Toast.LENGTH_SHORT).show();
}
} catch (FileNotFoundException e) {
//Toast.makeText(Settings.this, "Restore unsuccessful! File not found! Directory does not exist?", Toast.LENGTH_LONG).show();
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) { Toast.makeText(Settings.this, "Restore unsuccessful!",
Toast.LENGTH_SHORT).show();
// TODO Auto-generated catch block
e.printStackTrace();
}
答案 0 :(得分:1)
在继续恢复操作之前检查文件是否存在,如下所示:
new File(directory, "/myapp.db").exists()
如果文件不存在, FileInputStream
将自动创建文件。