10

ディレクトリを作成しようとしていますが、毎回失敗するようです。これも権限の問題ではないことを確認しました。そのディレクトリに書き込むための完全な権限があります。前もって感謝します。

コードは次のとおりです。

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)
4

2 に答える 2

29

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.mkdir()することf.mkdirs()であり、それは機能しました

于 2012-08-26T01:30:10.043 に答える
8

@La bla blaがそれを釘付けにしたと思いますが、完全を期すために、呼び出しが失敗する可能性があると私が考えることができるすべてのことを次に示します。File.mkdir()

  • パス名の構文エラー。例:ファイル名コンポーネントの不正な文字
  • 最終的なディレクトリコンポーネントを含むディレクトリが存在しません。
  • その名前の何かがすでにあります。
  • 親ディレクトリにディレクトリを作成する権限がありません
  • パス上の一部のディレクトリでルックアップを実行する権限がありません
  • 作成するディレクトリは、読み取り専用のファイルシステム上にあります。
  • ファイルシステムでハードウェアエラーまたはネットワーク関連のエラーが発生しました。

(明らかに、これらの可能性のいくつかは、この質問の文脈ですぐに排除することができます...)

于 2012-08-26T02:01:24.567 に答える