データベースを内部ストレージから外部にコピーしようとしていますが、データベースをコピーしていません。新しい空のsqliteファイルを作成するだけです。私が実際に逃しているアイデアは何ですか?内部ストレージから外部ストレージにアンドロイドコピーデータベースが空のデータベースを返します
public static void copyFile(String currentDBPath, String backupDBPath){
try {
File sd = Environment.getExternalStorageDirectory();
//File data = Environment.getDataDirectory();
if (sd.canWrite()) {
File currentDB = new File(currentDBPath);
File backupDB = new File(backupDBPath);
if (currentDB.exists()) {
FileChannel src = new FileInputStream(currentDB).getChannel();
FileChannel dst = new FileOutputStream(backupDB).getChannel();
dst.transferFrom(src, 0, src.size());
src.close();
dst.close();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
をし、このようにそれを使用して::
File database = new File("/sdcard/Stam/Data/");
database.mkdirs();
RPCCommunicator.copyFile("/data/data/" + this.getPackageName()+ "/databases/stam_sys_tpl.sqlite","/sdcard/Stam/Data/system.sqlite");
だから、system.sqliteを作成していますが、それは任意のテーブルのない空のですが、これを使用してここで
は、私が使用しているものです。私がしたいことは、データを失うことなく、現在のディレクトリから新しいディレクトリにデータベースを移動することです。
なぜそれが正しく動作しないのでしょうか?
拡張子は.sqliteで、.dbではありませんか? –
私はかなり確信しています –
通常は、外部ストレージが "/ sdcard"と呼ばれることは絶対にお勧めしません。常にEnvironment#getExternalStorageDirectory()を使用してください。また、データベースファイルへのパスを手動で構築しないで、Context#getDatabasePath( "stam_sys_tpl.sqlite")を使用してください。 – Jens