2014-03-19 71 views
0

這其中有我難住了(Android 4.3以上)無法寫入到/ mnt/SD卡

我有正確的權限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

...我明確地創建路徑/ storage/sdcard0/path/to/data.csv,FileOutputStream不會拋出任何異常。

我試着通過Environment.getExternalStorageDirectory()讀取路徑,但有一些「模擬」路徑。

在任何情況下,我看不到在文件系統中的文件...

更重要的是令人困惑的是,MEDIA_MOUNTED_READ_ONLY是mounted_ro ...但是這並非如此。

它看起來像另一個應用程序我們使用/ mnt/extSdCard ...我試圖在我的應用程序中硬編碼,但也不起作用。即使目錄丟失。這很混亂。

,我號召本課程的mkdirs()和FileOutputStream中創建....

我在做什麼錯?

+0

運行代碼時設備是否插入計算機? –

+0

您應該使用API​​返回的「模擬」路徑 - 也請注意,adb看到*的安裝位置與應用程序看到/使用的安裝位置不同。 –

+0

你可以檢查[this](http://stackoverflow.com/a/13078328/2683275)?和[這](http://stackoverflow.com/questions/15820148/cannot-write-to-sd-card-on-android-phone)也。 –

回答

0

請嘗試下面的代碼,並查看它失敗的位置?

 try { 
      File mPath = new File(android.os.Environment.getExternalStorageDirectory(),"path/to"); 
      if (!mPath.exists()) { 
       if(!mPath.mkdirs()) { 
        Log.e(getClass().getName(), "Can't Create Folder: "+mPath.getName()); 
       } 
      } 
      File mLogFile = new File(mPath, "data.csv"); 
      FileWriter mFileWriter = null; 
      if(mPath.canWrite()) { 
       mFileWriter = new FileWriter(mLogFile, true); 
       mBufferedWriter = new BufferedWriter(mFileWriter); 
      } 
      else { 
       Log.e(getClass().getName(), "Can't write under Folder: "+mPath.getName()); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     }