3

このエラーが発生します

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

更新必要なファイル名 + mkdirs の正しい使用法に一致するディレクトリ (f any) を削除するコードを追加すると、問題が解決したようです。最も近い回答を受け入れました。

4

2 に答える 2

9

mkdirs()ファイルにつながるディレクトリだけでなく、ファイルが指すパスを持つディレクトリも作成します。createNewFile()それが失敗する理由です。mkdirs()代わりに親ファイルを呼び出す必要があります。

File parent = f.getParentFile();
if (parent != null) parent.mkdirs();
于 2013-07-09T13:04:16.963 に答える
1

ご注意ください

f.mkdirs();

このステートメントの戻り値を確認する必要があります。true の場合は続行し、それ以外の場合はパスが存在しません。

于 2013-07-09T13:04:09.340 に答える