В моем приложении мне нужно реализовать восстановление базы данных комнаты, которую я экспортировал в локальное хранилище. Мне удалось скопировать все 03 файлы базы данных (.db -shm и wal), используя get getDatabasePath (DATABASE_NAME) .getAbsolutePath (). Чтобы заменить его обратно, я копирую эти экспортированные файлы обратно в исходный путь к базе данных, который работает нормально, но никакие данные не отображаются, когда я получаю к нему доступ из приложения. Экспортированная база данных четко показывает всю таблицу с помощью инструмента DB Browser. Я не уверен, почему он не работает. Это кнопка резервного копирования, которая создает файлы резервных копий. Я не уверен, что я ошибаюсь или что-то не так в моем коде.
backpathbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String currentDBPath =
getDatabasePath(DATABASE_NAME).getAbsolutePath();
String backupDBPath = "my_db";
File sd = Environment.getExternalStorageDirectory();
File data = Environment.getDataDirectory();
String rot = Environment.getExternalStorageDirectory().toString();
File currentDB = new File(currentDBPath);
File backupDB = new File(sd, backupDBPath);
if (currentDB.exists()) {
try {
db.close();
FileChannel src = new FileInputStream(currentDB).getChannel();
FileChannel dst = new FileOutputStream(backupDB).getChannel();
dst.transferFrom(src, 0, src.size());
src.close();
dst.close();
backupDB = new File(sd, backupDBPath+"-shm");
src = new FileInputStream(currentDB+"-shm").getChannel();
dst = new FileOutputStream(backupDB).getChannel();
dst.transferFrom(src, 0, src.size());
src.close();
dst.close();
backupDB = new File(sd, backupDBPath+"-wal");
src = new FileInputStream(currentDB+"-wal").getChannel();
dst = new FileOutputStream(backupDB).getChannel();
dst.transferFrom(src, 0, src.size());
src.close();
dst.close();}
catch (IOException e) {
e.printStackTrace();
}}} });
Вот кнопка восстановления
restorebutton.setOnClickListener(v -> {
db.close();
String back=
getDatabasePath(DATABASE_NAME).getAbsolutePath();
File sd = Environment.getExternalStorageDirectory();
File data = Environment.getDataDirectory();
String current = "my_db";
String currentsh = "my_db-shm";
String currentwl = "my_db-wal";
String filepath= sd+"/"+current;
String shmfile= sd+"/"+currentsh;
String currenwl= sd+"/"+currentwl;
File dest=new File(back);
Log.d(TAG, "Following files are in absolute path " + dest.list()); // returning null
try {
copyFile(filepath,dest);
copyFile(shmfile,dest);
copyFile(currenwl,dest);
Log.d(TAG, "Copied Sucessfully "); // it Copies without error
}
catch (IOException e) {
e.printStackTrace();
}
});
}
Вот моя функция копирования файла
public void copyFile(String src, File dst) throws IOException
{
FileChannel inChannel = new FileInputStream(String.valueOf(src)).getChannel();
FileChannel outChannel = new FileOutputStream(dst).getChannel();
try
{
inChannel.transferTo(0, inChannel.size(), outChannel);
}
finally
{
if (inChannel != null)
inChannel.close();
if (outChannel != null)
outChannel.close();
}
}
После возврата к моей основной деятельности восстановленные данные не отображаются, даже после закрытия и повторного открытия приложения.