Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

Java辞典

  1. トップページ
  2. Java辞典
  3. Files.exists() / isFile() / isDirectory() / createDirectory()

Files.exists() / isFile() / isDirectory() / createDirectory()

ファイルやディレクトリの存在確認・種別判定・新規作成・削除を行うメソッドです。Files クラスと Path を組み合わせて使用します。ファイル操作の前に存在確認を行うことで、不要な例外を防ぐことができます。

構文
// ファイルまたはディレクトリが存在するか確認します。
Files.exists(Path.of("パス"));

// 通常ファイルかどうかを確認します。
Files.isFile(Path.of("パス"));

// ディレクトリかどうかを確認します。
Files.isDirectory(Path.of("パス"));

// ディレクトリを作成します(中間ディレクトリも含めて作成する場合)。
Files.createDirectories(Path.of("パス"));

// ファイルを削除します。
Files.delete(Path.of("パス"));
メソッド一覧
メソッド概要
Files.exists(Path)パスが指すファイルまたはディレクトリが存在するか確認し、boolean 型で返します。
Files.isRegularFile(Path)通常ファイルかどうかを確認します。シンボリックリンクの場合はリンク先を確認します。
Files.isDirectory(Path)ディレクトリかどうかを確認し、boolean 型で返します。
Files.createDirectory(Path)ディレクトリを1階層だけ作成します。親ディレクトリが存在しない場合は例外がスローされます。
Files.createDirectories(Path)中間ディレクトリを含めてディレクトリを作成します。既に存在していても例外をスローしません。
Files.delete(Path)ファイルまたは空のディレクトリを削除します。存在しない場合は例外がスローされます。
Files.deleteIfExists(Path)ファイルが存在する場合のみ削除します。存在しない場合は例外をスローしません。
サンプルコード
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

Path filePath = Path.of("sample.txt");
Path dirPath  = Path.of("output/data");

// ファイルの存在確認をします。
if (Files.exists(filePath)) {
    System.out.println("ファイルが存在します。");
} else {
    System.out.println("ファイルが存在しません。");
}

// ファイルかディレクトリかを判定します。
System.out.println(Files.isRegularFile(filePath)); // ファイルなら true。
System.out.println(Files.isDirectory(dirPath));    // ディレクトリなら true。

// ディレクトリを作成します(中間ディレクトリも含む)。
try {
    Files.createDirectories(dirPath);
    System.out.println("ディレクトリを作成しました。");
} catch (IOException e) {
    e.printStackTrace();
}

// ファイルを削除します。
try {
    Files.deleteIfExists(filePath);
    System.out.println("削除が完了しました(存在しない場合は何もしません)。");
} catch (IOException e) {
    e.printStackTrace();
}
概要

『exists()』でチェックしてから操作を行う「チェック後操作」は競合状態(TOCTOU: Time-Of-Check Time-Of-Use)の問題があります。マルチスレッド環境では、確認と操作の間に別のプロセスがファイルを作成・削除する可能性があります。可能な限り例外処理で対応する設計が推奨されます。

『delete()』は空でないディレクトリは削除できません。ディレクトリを中身ごと削除するには『Files.walk()』と組み合わせて再帰的に削除する必要があります。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。