web-dev-qa-db-ja.com

mkdir()は新しいディレクトリを作成していません

私はEclipseとjdk1.7を使用しています。私は、ファイル処理を使用して、ディレクトリ内の出力ディレクトリを作成する基本的なプログラムを作成しています。しかし、プログラムを実行すると、出力にfalseが表示され、ディレクトリが作成されません。同じ名前のディレクトリが存在するため、出力が間違っていると思いましたが、これは理由ではありません。だから私は助けが必要です。これが私のコードです:

_import Java.io.File;

public class P {
    public static void main(String[] args) {
        File f1 = new File ("abc");
        File f2 = new File (f1,"abc");
        System.out.println(f2.mkdir());
    }
}
_

その出力はfalseですが、ディレクトリはまだ作成されていません。この問題を解決するにはどうすればよいですか?これはこのプログラムだけではありません-私がmkdir()メソッドを呼び出しているすべてのプログラムが同じ問題を抱えています。

16
user2529216

複数のディレクトリを作成する場合は、 mkdirs() をsとともに使用する必要があります。一部の場所が許可されているため、その場所に canWrite() であることを確認することもおそらく価値があります。これらは両方ともFileクラスにあります

33
RNJ

そのobj.mkdirs()

これを見てください:

File  f = new File("non_existing_dir/someDir");
System.out.println(f.mkdir());
System.out.println(f.mkdirs());

最初の出力はディレクトリを作成せずにfalseを返しますが、2番目の出力はtrueを返します

18
tokhi

ディレクトリ作成の例

fileが "abc"を推測するようには見えないので、パスに少し手を加える必要があるようです。

また、ディレクトリを作成しようとしているパスに対する権限があることを確認してください。そうしないと失敗します。私がJavaで遊んだのは久しぶりなので、mkdirをパス全体に渡って呼び出す必要があるかどうかはわかりません(つまり、/ here /、/ here/now-here /、/ here/now-ここ/最終)かどうか。それは再帰的かもしれないと思いますが、それは確認する価値があります。

実際、他の回答を見ると、mkdirsは再帰的であるように見えますが、mkdirはそうではありません。特に、最初から入力がわからない場合はmkdirsを使用します。そうしないと、まったく同じことを行うmkdirを使用して関数を作成してしまいます。

0
Robert

唯一のfile.mkdirs()の呼び出しは機能しないことがよくあります。 -などの評価でそれを呼び出します

if(file.mkdirs()){ //do something}

または、次のような割り当てで-

 boolean result = file.mkdirs();
0
mohammad sagor

ディレクトリ名にドットがないことを確認してください。たとえば、「ab.c」は「abc」に変更する必要があります。

0
edilon Junior

あなたの場合、Fileクラスのmakedirectoriesメソッドを利用できます。

File dir = new File("path name");
boolean isCreated = dir.mkdirs();

ここでmakedirectoriesメソッドは、ファイルオブジェクトが表すパスにないすべてのディレクトリを作成します。

ソースとリファレンスは以下にあります(詳細に説明されています)。

http://www.flowerbrackets.com/create-directory-Java-program/

https://docs.Oracle.com/javase/6/docs/api/Java/io/File.html#canWrite%28%29

0
Shiva

mkdirには、相対パスではなく、抽象パスが必要です。使用してみてください...

File f2 = new File (f1, "C:\\");

... 例えば。

From Java DOC:から

パブリックブールmkdir()

この抽象パス名で指定されたディレクトリを作成します。

戻り値:

ディレクトリが作成された場合にのみtrue。そうでなければ偽

スロー:

SecurityException-セキュリティーマネージャーが存在し、そのSecurityManager.checkWrite(Java.lang.String)メソッドが指定されたディレクトリの作成を許可しない場合

0
cristi