データベースをバックアップとしてフォルダにコピーし、復元としてアプリのデータベース フォルダにコピーするチュートリアルを見つけました。バックアップした .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();
}
編集:ジェイソンの回答を追加しましたが、ディレクトリBにfalseを取得して復元に失敗した場合でも、データベースはクリアされます! ファイルが見つかりません!ディレクトリ/ファイルが存在しませんか? メッセージ ???!?!
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();
}