2010-07-22 82 views
4

我是Android開發中的新手。我嘗試寫一些文件。 我使用的代碼:Android寫入文件 - 無法找到文件

try { 
        FileOutputStream fOut = openFileOutput(
          "out.txt", MODE_WORLD_READABLE); 

        OutputStreamWriter osw = new OutputStreamWriter(fOut); 
        osw.write("something"); 
        osw.flush(); 
        osw.close(); 
        fOut.close(); 

       } catch (MalformedURLException e) { 
        Log.e("FILE WRITE ERROR", e.getMessage()); 
       } catch (IOException e) { 
        Log.e("FILE WRITE ERROR", e.getMessage()); 
       } 

一切很確定,但我無法找到DDMS文件資源管理器中的文件。你能幫我,告訴我Android保存文件的位置嗎?它不在「/ data/data/my_project_package」中。 謝謝。

回答

5

1)一定要有這在你的清單:

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

2)它的確與衆不同,無論是與仿真器或設備測試。如果是後者,請務必從PC上卸載設備(選擇「僅充電」)。調試仍然可以這樣工作。只是你不能同時寫字和觀看。

此方法效果:

public void writeToExternalStoragePublic(String filename, int content) { 
    String packageName = this.getPackageName(); 
    String path = Environment.getExternalStorageDirectory().getAbsolutePath()+ "/Android/data/" + packageName + "/files/"; 
    if (isExternalStorageAvailable() && !isExternalStorageReadOnly()) { 
     try { 
      boolean exists = (new File(path)).exists(); 
      if (!exists) { 
       new File(path).mkdirs(); 
      } 
      // Open output stream 
      FileOutputStream fOut = new FileOutputStream(path + filename,true); 
      // write integers as separated ascii's 
      fOut.write((Integer.valueOf(content).toString() + " ").getBytes()); 
      fOut.write((Integer.valueOf(content).toString() + " ").getBytes()); 
      // Close output stream 
      fOut.flush(); 
      fOut.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+1

我試着用'''使用這段代碼。我仍然在FileOutputStream行中得到FileIOException(java.io.FileNotFoundException:/mnt/sdcard/Android/data/com.foo/files/This.html:open failed:EACCES(Permission denied))''。我可能會錯過什麼?我正在模擬器中運行。我注意到'File(path).mkdirs()'不會拋出任何異常。它也不會創建目錄。 – 2011-12-26 09:12:36

1

似乎那裏有很多關於這個主題,而不是要求在AndroidManifest.xml II)安裝該設備的存儲權限似乎往往歸結到我的問題)問題到應用程序運行時的計算機或iii)仿真器設置。

爲了讓其他人嘗試了所有這些解決方案並且失敗了,我提交了iv)計算機決定在從另一臺計算機上寫入的源存儲庫中提取代碼後,任意忽略您在AndroidManifest.xml中的權限設置。就我而言,我只是在計算機A上編寫了一些寫入外部存儲的代碼。我將所述代碼檢查到源代碼控制中,然後將所述代碼拉到計算機B.當我將計算機B的應用程序重新安裝到設備上時,我開始獲得權限被拒絕的異常。

的修復:讓任何改變計算機B上的AndroidManifest.xml文件(例如,插入新行的地方)。這爲我解決了這個問題。我不知道爲什麼。這可能是最罕見的情況之一,但更令人沮喪的情況之一。

1

<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE">置於您的清單中。

Here是它的參考。

+0

此權限僅適用於系統應用程序... – 2014-03-17 16:45:58