2013-07-09 57 views
3

我得到这个错误获得FileNotFoundException异常/ EISDIR

java.io.FileNotFoundException: /data/data/com.example.app/cache/news.xml:打开失败: EISDIR(是一个目录)

使用此代码

try { 
    File cache = ctx.getCacheDir(); 
    String s = cache.getAbsolutePath() + File.separator + path; 
    File f = new File(s); 
    File pf = f.getParentFile(); 
    if (pf != null) { 
    pf.mkdirs(); 
    } 
    if ((pf.exists()) && (pf.isDirectory())) {   
    if ((!f.exists()) || (!f.isFile())) { 
     f.createNewFile(); 
    } 
    if ((f.exists()) || (f.isFile())) { 
     FileOutputStream os = null;   
     os = new FileOutputStream(s, false);    
     if (os != null) { 
     SharedCode.sharedWriteTextFileToStream(str, os);     
     } 
     os.flush(); 
     os.close(); 
    } 
    } 
} 
catch (IOException e) { 
    String s = e.toString(); 
}   

更新添加代码删除与所需文件名匹配的目录(f any)+正确使用mkdirs似乎解决了这个问题。接受最接近的答案。

+0

您是否声明了'WRITE_EXTERNAL_STORAGE'权限? –

+0

的路径是否包含文件名? – giorashc

+0

@giorasch是的它确实 – Tom

回答

9

mkdirs()不仅创建导致该文件的目录,而且创建一个文件指向路径的目录。这就是为什么createNewFile()失败。您需要在父文件上调用mkdirs()

File parent = f.getParentFile(); 
if (parent != null) parent.mkdirs(); 
+0

我已更改为现在使用您的代码。但我仍然得到同样的错误。我会试着研究一下如果有一个目录与我正在创建的文件具有相同的名称,如果是,可能试图先删除它。 (Torgther与您的解决方案,这应该解决问题) – Tom

1

请注意

f.mkdirs(); 

你需要检查该语句的返回值。如果是,则继续,否则路径不存在。

+0

尽管如此,但这并不能解决问题。 – giorashc

+0

@giorashc你对。我只是想方设法让他自己找到正确的答案。这样我们就不需要做勺子喂养 –

+0

我会添加代码来检查,但仅供参考,它是真的。 – Tom

相关问题