Tom
Tom

Reputation: 3627

Getting FileNotFoundException / EISDIR

I get this error

java.io.FileNotFoundException: /data/data/com.example.app/cache/news.xml: open failed: EISDIR (Is a directory)

using this code

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();
}          

Update Adding code to delete the directory (f any) matching the wanted file name + correct usage of mkdirs appears to have solved the problem. Accepted closest answer.

Upvotes: 3

Views: 5728

Answers (2)

Malcolm
Malcolm

Reputation: 41510

mkdirs() creates not only the directories which lead to the file, but also a directory with the path the file points to. That's why the createNewFile() fails. You need to call mkdirs() on the parent file instead:

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

Upvotes: 9

W A K A L E Y
W A K A L E Y

Reputation: 867

please note

f.mkdirs();

you need to check the return value of this statement. If true then proceed otherwise path is not existing.

Upvotes: 1

Related Questions