ディレクトリを作成する(Files.createDirectory)

広告

Files クラスで用意されている createDirectory メソッドを使用することで、指定したディレクトリの中に新しくディレクトリを作成することができます。ここでは Java を使ってディレクトリを作成する方法について解説します。

新しいディレクトリを作成する

新しいファイルを作成するには Files クラスで用意されている createDirectory メソッドを使用します。 createDirectory メソッドはクラスメソッドです。書式は次のとおりです。

public static Path createDirectory?(Path dir, FileAttribute<?>... attrs) throws IOException

パラメータ:
dir - 作成するディレクトリ
attrs - ディレクトリの作成時に原子的に設定されるファイル属性のオプションのリスト

戻り値:
ディレクトリ

例外:
UnsupportedOperationException - ディレクトリの作成時に原子的に設定できない属性が配列に含まれる場合
FileAlreadyExistsException - その名前のファイルがすでに存在するためにディレクトリを作成できなかった場合(オプションの固有例外)
IOException - 入出力エラーが発生した場合または親ディレクトリが存在しない場合
SecurityException - デフォルト・プロバイダで、セキュリティ・マネージャがインストールされている場合は、checkWriteメソッドが呼び出されて新しいディレクトリへの書込みアクセスがチェックされます

1 番目の引数に作成するディレクトリを表す Path オブジェクトを指定します。省略可能な 2 番目の引数は作成するディレクトリの属性を表すリストを指定します。メソッドを実行すると、指定したパスにディレクトリを作成します。

※ Path オブジェクトを使ってファイルやディレクトリを表す方法については「Pathオブジェクトを使ってファイルやディレクトリを表す」を参照されてください。

作成しようとするディレクトリと同じ名前のディレクトリやファイルが既に存在している場合は FileAlreadyExistsException 例外が発生します。また作成しようとしているディレクトリの親ディレクトリが存在しない場合は IOException が発生します。

次のサンプルをみてください。

Path p = Paths.get("C:/code/java/file/doc");

try{
  Files.createDirectory?(p);
}catch(IOException e){
  System.out.println(e);
}

C:\code\java\file ディレクトリの中に doc というディレクトリを作成します。作成しようとしているディレクトリが既に存在すると例外が発生します。

サンプルコード

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample5-1.java という名前で保存します。

import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.Files;
import java.io.IOException;

class JSample5_1{
  public static void main(String[] args){
    Path p = Paths.get("C:/code/java/file/doc");

    try{
      Files.createDirectory?(p);
    }catch(IOException e){
      System.out.println(e);
    }
  }
}

コンパイルを行います。

javac -encoding UTF-8 JSample5_1.java

その後で、次のように実行してください。

java JSample5_1

新しいディレクトリを作成する(1)

指定したパスが示すディレクトリを新しく作成しました。

新しいディレクトリを作成する(2)

なおディレクトリが存在している状態でもう一度同じプログラムを実行すると例外が発生します。

新しいディレクトリを作成する(3)

親ディレクトリも含めて作成する

Files.createFile メソッドの場合、作成しようとするディレクトリの親ディレクトリが存在していないと例外が発生します。例えば C:\AAA\BBB\CCC というディレクトリを作成するときに C:\AAA や C:\AAA\BBB が存在していない場合です。

親ディレクトリが存在していない場合、親ディレクトリも含めてディレクトリを作成するには Files クラスで用意されている createDirectories メソッドを使用します。 createDirectories メソッドはクラスメソッドです。書式は次のとおりです。

public static Path createDirectories?(Path dir, FileAttribute<?>... attrs) throws IOException

パラメータ:
dir - 作成するディレクトリ
attrs - ディレクトリの作成時に原子的に設定されるファイル属性のオプションのリスト

戻り値:
ディレクトリ

例外:
UnsupportedOperationException - ディレクトリの作成時に原子的に設定できない属性が配列に含まれる場合
FileAlreadyExistsException - dirが存在するが、ディレクトリではない場合(オプションの固有例外)
IOException - 入出力エラーが発生した場合
SecurityException - デフォルト・プロバイダで、セキュリティ・マネージャがインストールされている場合は、ディレクトリの作成を試みる前にcheckWriteメソッドが呼び出され、チェックされる親ディレクトリごとに、そのcheckReadメソッドが呼び出されます。 dirが絶対パスでない場合は、そのtoAbsolutePathを呼び出してその絶対パスを取得することが必要になることがあります。 これによって、セキュリティ・マネージャのcheckPropertyAccessメソッドが呼び出されて、システム・プロパティuser.dirへのアクセスがチェックされることがあります。

1 番目の引数に作成するディレクトリを表す Path オブジェクトを指定します。省略可能な 2 番目の引数は作成するディレクトリの属性を表すリストを指定します。メソッドを実行すると、指定したパスにディレクトリを作成します。

作成しようとするディレクトリと同じ名前のファイルが既に存在している場合は FileAlreadyExistsException 例外が発生します。

次のサンプルをみてください。

Path p = Paths.get("C:/code/java/file/doc/manual/back");

try{
  Files.createDirectories?(p);
}catch(IOException e){
  System.out.println(e);
}

C:\code\java\file\doc\manual ディレクトリの中に back というディレクトリを作成します。パスの途中にあるディレクトリが存在しない場合は同時に作成します。

サンプルコード

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample5-2.java という名前で保存します。

import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.Files;
import java.io.IOException;

class JSample5_2{
  public static void main(String[] args){
    Path p = Paths.get("C:/code/java/file/doc/manual/back");

    try{
      Files.createDirectories(p);
    }catch(IOException e){
      System.out.println(e);
    }
  }
}

コンパイルを行います。

javac -encoding UTF-8 JSample5_2.java

その後で、次のように実行してください。

java JSample5_2

親ディレクトリも含めて作成する(1)

指定したパスが示すディレクトリを新しく作成しました。今回はパスの途中にある親ディレクトリも含めて作成しています。

親ディレクトリも含めて作成する(2)

なお Files.createFile メソッドの場合は、作成しようとするディレクトリが既に存在していても例外は発生しません。

親ディレクトリも含めて作成する(3)

-- --

Java を使ってディレクトリを作成する方法について解説しました。

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)
Profile
profile_img

著者 / TATSUO IKURA

初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。