2012-08-26 66 views
7

ディレクトリを作成しようとしていますが、毎回失敗するようですか?私はそれも許可の問題ではないことを確認した、私はそのディレクトリに書き込む完全な許可を持っています。前もって感謝します。ここでJava - mkdir()ディレクトリを作成しない

はコードです:ここでは

private void writeTextFile(String v){ 
    try{ 

     String yearString = convertInteger(yearInt); 
     String monthString = convertInteger(month); 
     String fileName = refernce.getText(); 
     File fileDir = new File("C:\\Program Files\\Sure Important\\Report Cards\\" + yearString + "\\" + monthString); 
     File filePath = new File(fileDir + "\\"+ fileName + ".txt"); 
     writeDir(fileDir); 
     // Create file 
     FileWriter fstream = new FileWriter(filePath); 
     try (BufferedWriter out = new BufferedWriter(fstream)) { 
      out.write(v); 
     } 
    }catch (Exception e){//Catch exception if any 
    System.err.println("Error: " + e.getMessage()); 
    } 
} 

private void writeDir(File f){ 
    try{ 
     if(f.mkdir()) { 
      System.out.println("Directory Created"); 
     } else { 
     System.out.println("Directory is not created"); 
     } 
    } catch(Exception e){ 
     e.printStackTrace(); 
    } 
} 

public static String convertInteger(int i) { 
    return Integer.toString(i); 
} 

Calendar cal = new GregorianCalendar(); 
public int month = cal.get(Calendar.MONTH); 
public int yearInt = cal.get(Calendar.YEAR); 

が出力されます。

Directory is not created 
Error: C:\Program Files\Sure Important\Report Cards\2012\7\4532.txt (The system cannot find the path specified) 

答えて

24

File.mkdirは、親ディレクトリが存在する場合にのみ、ディレクトリが作成されますので、それはおそらくです。 File.mkdirsを使って、必要なディレクトリをすべて作成してみてください。

私のために働いたコードは次のとおりです。

private void writeDir(File f){ 
    try{ 
     if(f.mkdirs()) { 
      System.out.println("Directory Created"); 
     } else { 
     System.out.println("Directory is not created"); 
     } 
    } catch(Exception e){ 
      // Demo purposes only. Do NOT do this in real code. EVER. 
      // It squashes exceptions ... 
     e.printStackTrace(); 
    } 
} 

私が作った唯一の変化はf.mkdirs()f.mkdir()を変更することでした、それは私が@La BLAのBLAがそれを釘付けしていると思いますが、ちょうど完全を期すため、ここでその私ができるすべてのものがある

+0

問題であるように思わ乾杯それが:)に私をalowsとき、私は答えを受け入れます感謝!!! – Nick

+1

パス名の "動的な"部分には2つのディレクトリがあるので、この理論はかなり良いと言えるでしょう... –

+1

あなたのコードをコピーしてmkdirs()に変更しました。関連コードを含むように編集する –

6

を働きました

    • パス名の構文エラー;:失敗する File.mkdir()への呼び出しを引き起こす可能性があることを考える 例えば
    • 最終ディレクトリコンポーネントを格納するディレクトリが存在しません。
    • すでにその名前のものがあります。
    • あなたが
    • ディレクトリが作成されるパス上のいくつかのディレクトリに検索を実行する権限はありません
    • 親ディレクトリ内のディレクトリを作成する権限がありませんが、読み取り専用でありますファイルシステム。
    • ファイルシステムがハードウェアエラーまたはネットワーク関連のエラーを発生しました。

    (もちろん、これらの可能性のいくつかはすぐにこの質問の文脈で除去することができ...)

  • +0

    警告:WINDOWS7。私は、ファイル名にWindow7のレガシーワード(CON、PRN、AUX、CLOCK $、NUL、COM1-COM9、LPT1-LPT9 ...のいずれか)のディレクトリ部分が含まれている場合、 ...私たちはしませんでしたか?)mkdirsは警告や明白な論理的説明なしで失敗します。 Java 7やその他のプログラミング言語には影響しません。 DOS cmdシェルには影響しません。 –

    関連する問題