2016-12-28 83 views
0
public void exportDatabse(String databaseName) { 

     try { 
      File sd = Environment.getExternalStorageDirectory(); 
      File data = Environment.getDataDirectory(); 
      if (sd.canWrite()) { 
       String currentDBPath = "//data//"+getPackageName()+"//databases//"+databaseName+""; 
       String backupDBPath ="//database.sql"; 
       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(); 
        Log.i(TAG,"coping database sucessfull"); 
       } 
      } 
     } catch (Exception e) { 
     Log.i(TAG,"exception! "+ e.getMessage()); 
     } 
    } 

在調試sd文件位置File sd = Environment.getExternalStorageDirectory();Environment.getExternalStorageDirectory返回壞值

/存儲/模擬/ 0

enter image description here

複製的文件是不可見在我的SDcard中。此外,我知道sd文件的位置不正確。我怎樣才能得到database.sql文件? UPDATE

enter image description here

+1

[外部存儲](https://commonsware.com/blog/2014/04/08/storage-situation-external-storage.html)不是[可移動存儲(https://開頭commonsware.com/blog/2014/04/09/storage-situation-removable-storage.html)。你有很多應該修復的重複的'/'值。並且您的副本對於大多數應用程序(和桌面操作系統)都是不可見的,除非[您獲得由'MediaStore'索引的副本](https://stackoverflow.com/questions/32789157/how-to-write-files -to-外部公共存儲功能於Android的那麼認爲,他們 - 是 - visibl)。 – CommonsWare

回答

2

通過Environment.getExternalStorageDirectory返回的值是正確的,並沒有什麼不妥的地方。

這裏的問題是,Android設備監視器不直接支持符號鏈接(符號鏈接)。您應該在文件資源管理器中手動關閉/展開它們。

因此在您的情況下,您需要展開storage文件夾,然後再擴大emulated0文件夾。

如果這樣做不起作用,您可能需要嘗試擴展storage文件夾,然後再打開selfprimary文件夾。

TLDR:手動跟隨/展開info列中的路徑。

編輯: 不妨擴展標記爲黃色的文件夾。

Android Device Monitor File Explorer

+0

我的目標文件夾上的文件在文件夾6314-6720,所以我需要在該路徑上創建文件?你有什麼看法如何做到這一點? – Expiredmind

+0

你不需要創建任何東西(你的代碼看起來很好),只需展開正確的文件夾並遵循符號鏈接即可。還要確保你的代碼不會失敗(檢查logcat),你還需要寫入外部存儲的權限:WRITE_EXTERNAL_STORAGE。 Android設備監視器中的 –

+0

?存儲/模擬文件夾是空的或我沒有acces它 – Expiredmind