2014-02-24 62 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