获取FileNotFoundException / EISDIR

时间:2013-07-09 12:59:25

标签: java android file exception

我收到此错误

  

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似乎已解决了问题。接受最接近的答案。

2 个答案:

答案 0 :(得分:9)

mkdirs()不仅会创建指向该文件的目录,还会创建一个包含该文件指向的路径的目录。这就是createNewFile()失败的原因。您需要在父文件上调用mkdirs()

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

答案 1 :(得分:1)

请注意

f.mkdirs();

您需要检查此语句的返回值。如果为true,则继续,否则路径不存在。