sqlite - 当数据库文件丢失时,安卓还原数据库清除数据库

  显示原文与译文双语对照的内容
0 0

我找到了一个教程 of,它将数据库复制为备份,并将它的复制回应用程序的数据库文件夹。 除了一件事,几乎一切都正常: 从我的文件夹中删除备份的. 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 0

在继续还原操作之前,检查文件是否存在,如下所示:


new File(directory,"/myapp.db").exists()

如果文件不存在,FileInputStream 将自动创建文件。

原作者:
...