對於一個相當綠色的問題,我很抱歉,但是我找不到解決方案。如何將數據庫從SD卡複製到//數據庫
我想從SD卡備份恢復數據庫。下面的代碼(一個在所以這裏提供了輕微的修改版本)
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即使數據庫文件未打開。
謝謝你的回答。這些目錄肯定是好的 - 我能夠首先使用幾乎相同的代碼進行備份。 (字符串「\\」在最終輸出中顯示爲\) – user1008771
如果無法讀取/寫入文件,則它們不正確。你在unix系統上,所以反斜槓是錯誤的。他們可能在某些情況下工作,但那只是因爲Java正在彌補你的錯誤。認真。在Linux上,正斜槓。現在,您正在使用的表單中的File對象需要兩個參數。作爲父目錄的目錄和文件名。你傳遞一個目錄(錯誤的)和一個格式不好的目錄作爲文件名。嘗試新的文件(「/ data/data/[你的包]/databases/[你的db文件]」)。該表單採用完整路徑作爲字符串。 –
謝謝,這很有道理。但是,問題依然存在。複製到該目錄上的任何其他位置(即/data/data/com.dg/databases/fakeDB)是成功的,但不是DB文件本身。這發生在數據庫第一次打開之前(飛濺活動) – user1008771