1. 概要

Javaを使用してディレクトリを作成するのは非常に簡単です。 この言語は、単一のディレクトリまたは複数のネストされたディレクトリのいずれかを作成できる2つのメソッド、 mkdir()および mkdirs()を提供します。

このチュートリアルでは、両方がどのように動作するかを確認します。

2. 単一のディレクトリを作成する

単一のディレクトリの作成から始めましょう。

ここでは、ユーザーtempディレクトリを使用します。 System.getProperty(“ java.io.tmpdir”)で検索できます。

このパスをJavaFile オブジェクトに渡します。これは、一時ディレクトリを表します。

private static final File TEMP_DIRECTORY = new File(System.getProperty("java.io.tmpdir"));

それでは、その中に新しいディレクトリを作成しましょう。 これを実現するには、作成するディレクトリを表す新しいFileオブジェクトでFile::mkdirメソッドを呼び出します。

File newDirectory = new File(TEMP_DIRECTORY, "new_directory");
assertFalse(newDirectory.exists());
assertTrue(newDirectory.mkdir());

ディレクトリがまだ存在しないことを確認するために、最初に examples()メソッドを使用しました。

次に、 mkdir()メソッドを呼び出して、ディレクトリの作成が成功したかどうかを通知します。 ディレクトリがすでに存在する場合、メソッドはfalseを返します。

同じ呼び出しを再度行う場合:

assertTrue(newDirectory.exists());
assertFalse(newDirectory.mkdir());

次に、予想どおり、メソッドは2回目の呼び出しでfalseを返します。

そして、mkdir()メソッドは、ディレクトリがすでに存在する場合 だけでなく、他のいくつかの状況でもfalseを返します。 たとえば、作成するディレクトリの名前のファイルが存在する可能性があります。 または、このディレクトリを作成するための権限が不足している可能性があります。

そのことを念頭に置いて、ディレクトリを作成したか、すでに存在しているかにかかわらず、ディレクトリが最後に存在することを確認する方法を見つける必要があります。 そのために、 isDirectory()メソッドを使用できます。

newDirectory.mkdir() || newDirectory.isDirectory()

そうすることで、必要なディレクトリがそこにあることを確認します。

3. 複数のネストされたディレクトリを作成する

これまで見てきたことは、単一のディレクトリでうまく機能しますが、複数のネストされたディレクトリを作成したい場合はどうなりますか?

次の例では、 File ::mkdirがそのために機能しないことがわかります。

File newDirectory = new File(TEMP_DIRECTORY, "new_directory");
File nestedDirectory = new File(newDirectory, "nested_directory");
assertFalse(newDirectory.exists());
assertFalse(nestedDirectory.exists());
assertFalse(nestedDirectory.mkdir());

new_directory が存在しないため、mkdirは基になるnested_directoryを作成しません。

ただし、Fileクラスは、それを実現するための別のメソッドmkdirs()を提供します。このメソッドは mkdir()のように動作しますが、存在しないすべての親ディレクトリも作成します。

前の例では、これは nested_directory だけでなく、new_directory。も作成することを意味します。

これまではFile(File、String)コンストラクターを使用していましたが、 File(String)コンストラクターを使用し、File.separatorを使用してファイルの完全なパスを渡すこともできます。パスのさまざまな部分を分離するには:

File newDirectory = new File(System.getProperty("java.io.tmpdir") + File.separator + "new_directory");
File nestedDirectory = new File(newDirectory, "nested_directory");
assertFalse(newDirectory.exists());
assertFalse(nestedDirectory.exists());
assertTrue(nestedDirectories.mkdirs());

ご覧のとおり、ディレクトリは期待どおりに作成されます。 さらに、このメソッドは、少なくとも1つのディレクトリが作成された場合にのみtrueを返します。 mkdir()メソッドに関しては、それ以外の場合はfalseを返します。

したがって、これは、親が存在するディレクトリで使用される mkdirs()メソッドが、 mkdir()メソッドと同じように機能することを意味します。

4. 結論

この記事では、Javaでディレクトリを作成できる2つの方法を見てきました。 最初のmkdir()は、親がすでに存在する場合、単一のディレクトリの作成を対象としています。 2番目のmkdirs()は、ディレクトリとその存在しない親を作成できます。

この記事のコードは、GitHubにあります。