緑色の質問は申し訳ありませんが、解決策はまだ見つかりませんでした。SDカードからデータベースにデータベースをコピーする方法
SDカードのバックアップからデータベースを復元しようとしています。以下のコード(SOここに提供される一つのわずかな修正版)
try {
File sd = Environment.getExternalStorageDirectory();
File data = Environment.getDataDirectory();
if (sd.canWrite()) {
String currentDBPath =
"\\data\\com.dg\\databases\\" + com.dg.Constants.db_Table;
String backupDBPath = "com.dg";
File currentDB = new File(data, currentDBPath);
File backupDB = new File(sd, backupDBPath);
if (currentDB.exists()) {
FileChannel dst = new FileInputStream(currentDB).getChannel();
FileChannel src = new FileOutputStream(backupDB).getChannel();
dst.transferFrom(src, 0, src.size());
src.close();
dst.close();
}
line4.setText("Successful Import");
}
} catch (Exception e) {
line4.setText(e.toString());
}
データベースファイルが開いていない場合であってもNonWriteableChannelExceptionをスロー。
お返事ありがとうございます。ディレクトリは間違いなくOKです。最初はほとんど同じコードでバックアップを取ることができました。 (文字列 "\\"は最終出力に\として表示されます) – user1008771
ファイルを読み書きできない場合は、正常ではありません。あなたはUNIXシステム上にいるので、バックスラッシュは間違っています。いくつかのケースではうまくいくかもしれませんが、それはJavaがあなたの間違いを補償しているからです。真剣に。 Linuxでは、スラッシュをスラッシュします。現在、使用しているフォームであるjavaのFileオブジェクトには2つのパラメータがあります。あなたの親ディレクトリであるディレクトリとファイル名。ディレクトリ(間違ったもの)とフォーマットの悪いディレクトリをファイル名として渡しています。新しいファイル( "/ data/data/[あなたのパッケージ] /データベース/ [あなたのdbファイル]")を試してください。そのフォームはフルパスを文字列として取ります。 –
ありがとう、それは多くの意味があります。しかし、問題は解決しません。そのディレクトリの他の場所(つまり/data/data/com.dg/databases/fakeDB)へのコピーは成功しますが、DBファイル自体は成功しません。これは初めてDBを開く前に行われます(スプラッシュアクティビティ) – user1008771