2014-02-11 19 views
1

我試圖將我的應用程序數據庫從存儲數據複製到任何外部floder 但我得到一些錯誤。如何從應用中檢索數據庫的備份?

我的設備是植根,我已經使用來自谷歌的許多應用發揮到nevigate數據/數據,但它是空的,我已經使用這個代碼:

public void backup() { 
     try { 
      File sdcard = Environment.getRootDirectory(); 
      File outputFile = new File(sdcard, 
        "YourDatabase.db"); 

      if (!outputFile.exists()) 
       outputFile.createNewFile(); 

      File data = Environment.getDataDirectory(); 
      File inputFile = new File(data, 
        "data/"+LoginActivity.this.getPackageName()+"/databases/"+"HafilTC.db"); 
      InputStream input = new FileInputStream(inputFile); 
      OutputStream output = new FileOutputStream(outputFile); 
      byte[] buffer = new byte[1024]; 
      int length; 
      while ((length = input.read(buffer)) > 0) { 
       output.write(buffer, 0, length); 
      } 
      output.flush(); 
      output.close(); 
      input.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      throw new Error(e.toString()); 
     } 

的Android mainfilfist:

 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

錯誤日誌:

02-11 18:38:16.213: E/AndroidRuntime(21338): java.lang.Error: java.io.IOException: open failed: EROFS (Read-only file system) 
+0

您可以嘗試http://stackoverflow.com/a/27463738/730807 –

回答

1

問題是,Environment.getRootDirectory()不返回SD卡的根目錄。它將返回無法寫入的根OS目錄。

您應改爲使用Environment.getExternalStorageDirectory(),它將返回用戶外部存儲目錄的根目錄(可能是也可能不是SD卡,具體取決於設備)。

+0

當使用getExternalStorageDirectory()時。我得到錯誤:打開失敗:ENOENT(沒有這樣的文件或目錄) – user3245658

+0

你有SD卡嗎? – elbuild

+0

是的,我有SD卡,但你能給我任何其他方式來保存文件在本地存儲?沒有SD卡 – user3245658

0

此處至少有兩個選項。

使用DDMS

打開Eclipse,並切換到DDMS透視。

比遵循的路徑:

DDMS--> file explorer-->data--> data--> your package name-->databases 

你的數據庫應該是內部的數據庫文件夾,因爲你是一個根深蒂固的設備上,你可以得到它。

使用ADB

您可以使用ADB一旦你通過USB和啓用USB debig連接的設備。要檢查您的設備連接正確使用:

adb devices 

比用這些命令讓你的DB(你將它複製到SD卡,然後直接從那裏讀):

adb -d shell 
run-as your.package.name 
cat /data/data/your.package.name/databases/database_name.db > /sdcard/your_db_name.db 

如果您想以編程的方式來看看@Tanis.7x的建議。

+0

選項1:無法看到和文件夾的,但使用模擬器時,我可以使用此選項。 – user3245658

+0

任何機會你的/數據/數據路徑是否在別的地方?像在系統中一樣? – elbuild

+0

我已經搜索了很多次,但找不到它,但在ddms沒有任何文件夾 – user3245658

0

問題已經從 解決了刪除.db的HafilTC.db

,使其只是文件名:HafilTC