2012-02-01 3 views
3

私は、外部記憶装置への内部からファイルをコピーするためのコードのこの部分を使用しているために働いていない:Androidのコピーファイルは、任意の失うことなく、ローカルの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(); 
    } 
} 

私は内部ストレージまたはTXTから画像をコピーしようファイルは正常に動作していますが、エラーは発生せず、新しいファイルはsdカードにあります。しかし、/data/data/package/databases/system.sqliteから自分のローカルデータベースファイルをコピーしようとすると、指定された宛先に新しいファイルが作成されますが、新しいデータベースファイルは空であり、テーブルやデータはありません。

なぜデータベースファイルでしか起こっていないのでしょうか?

編集:

いいえ、私は気づいているように、コピーされた新しいデータベースファイルが元1(145キロバイト)と同じ大きさですが、私はsqliteのブラウザでそれを開いたときに表がありませんデータはありません。

+0

データベースがまだ開いているうちにコピーを試みていますか? – Kuffs

+0

私はそれがSDカードにコピーしようとしている間に閉じていることを確かめています。 –

+0

これを除いて、ファイルcurrentDB = getContext()。getDatabasePath(CurrentDBName);あなたのコードは私のものと同一であり、私の問題は問題ありません。 – Kuffs

答えて

0

これは、我々が使用しているものである:

  try { 
      File sd = Environment.getExternalStorageDirectory(); 
      File data = Environment.getDataDirectory(); 

      if (sd.canWrite()) { 
       String currentDBPath = "/data/com.our.package/databases/main.db"; 
       String backupDBPath = "main_" + additionalInfo + ".db"; 
       File currentDB = new File(data, currentDBPath); 
       File backupDB = new File(sd, 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(); 
       } else { 
        Log.e(TAG, "File does not exist: " + currentDBPath); 
       } 
      } else { 
       Log.e(TAG, "SDCard not writable, backup aborted."); 
      } 
     } catch (Exception ex) { 
      Log.e(TAG, "Error backing up database to sdcard.", ex); 
      return getResources().getInteger(R.integer.unhandled_exception_from_api_service); 
     } 

我々はSDカードにデータベースをバックアップし、SQLiteのブラウザを使用して、それを読み取ることができるしています。

関連する問題