2014-02-24 231 views
0

我正在嘗試將新的wave文件寫入外部存儲器上的Ringtones文件夾。但不幸的是,該文件沒有被創建。將文件寫入外部存儲器

我跟隨了關於如何做到這一點的android文檔,並按照建議的方式實現了它。

我也在清單中添加了適當的權限。另外,我檢查了我的設備外部存儲是可讀/可寫的。

以下代碼寫入日誌語句「目錄未創建」。而且,任何後續的流式調用都會導致nullPointer。

public WavFileOutStream(String fileName) 
{ 

    // Get the directory for the user's public pictures directory. 
    File file = new File(Environment.getExternalStoragePublicDirectory(
      Environment.DIRECTORY_RINGTONES), fileName); 
    if (!file.getParentFile().mkdirs()) { 
     Log.e("trace", "Directory not created"); 
    } 

    try { 
     stream = new DataOutputStream(new FileOutputStream(file)); 

    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 
+1

是目錄鈴聲已經存在於文件系統此權限的應用程序? – Kakarot

+0

是目錄鈴聲已經存在。 – user3341858

+0

在這種情況下,mkdir()將返回false ....參考http://docs.oracle.com/javase/7/docs/api/java/io/File.html#mkdir() – Kakarot

回答

0

您錯誤地解釋了日誌消息的含義及其原因。

File.mkdirs()被記錄返回:

  • true,如果該目錄創建,

  • 失敗或者虛假的目錄已經存在

由於鈴聲文件夾可能已經存在,您可能會遇到第二種情況。

如果還有其他原因認爲這不起作用,請將由以下catch塊生成的任何堆棧跟蹤編輯到您的問題的正文中。

+0

是的,對DataOutputStream流的任何後續調用都會導致nullPointer異常。這導致我相信文件沒有被打開。 – user3341858

+0

然後你需要編輯你的catch塊生成的堆棧跟蹤,或者(如果它沒有失敗)平臺未捕獲的異常處理程序到你的問題的正文中。 –

+0

只要在調用stream.anyMethod()時簡單歸結爲空指針異常。 – user3341858

0

我經常忘記自己。請確保您有明顯的:)

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

+0

感謝您的回覆。我補充說。 – user3341858

+1

哦,那還沒有解決你的問題嗎? – Rastikan

相關問題