Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaでファイルやディレクトリの存在を確認する方法(NIO・従来IOの両方を解説)

Javaでファイルやディレクトリが存在するかどうかを確認する方法は、主に次の2つがあります。

1. NIOパッケージ(java.nio.file)の Files.exists メソッド
2. 従来のIOパッケージ(java.io)の File.exists メソッド

この記事では、それぞれのパッケージを使った具体的なコード例を紹介します。Java 7以降を使用している場合は、より高機能で推奨されるNIO APIの利用を検討しましょう。

Java NIOでファイルの存在を確認する

NIOパッケージでは、PathPaths を使ってファイルパスを表現し、Files.exists で存在チェックを行います。あわせて Files.isRegularFile を使えば、それが通常のファイル(ディレクトリではない)であることも確認できます。

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

public class CheckFileExist {

    public static void main(String[] args) {

        Path path = Paths.get("/path/to/file/app.log");

        if (Files.exists(path)) {

            if (Files.isRegularFile(path)) {
                System.out.println("App log file exists");
            }

        } else {
            System.out.println("App log file does not exists");
        }
    }
}

Java NIOでディレクトリの存在を確認する

同様に、NIOパッケージを使ってディレクトリの存在を確認することもできます。Files.isDirectory メソッドを使うことで、指定したパスがディレクトリかどうかを判定できます。

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

public class CheckDirectoryExist {

    public static void main(String[] args) {

        Path path = Paths.get("/path/to/logs/");

        if (Files.exists(path)) {

            if (Files.isDirectory(path)) {
                System.out.println("Logs directory exists");
            }

        } else {
            System.out.println("Logs directory does not exist");
        }
    }
}

従来のJava IOでファイルの存在を確認する

NIOパッケージを使用しない場合は、従来の java.io パッケージにある File クラスでも同じことが可能です。古いコードベースとの互換性が必要な場面などで役立ちます。

import java.io.File;

public class CheckFileExists {

    public static void main(String[] args) {

        File file = new File("/path/to/file/app.log");

        if(file.exists()) {
            System.out.println("App log file exists");
        } else {
            System.out.println("App log file does not exist");
        }
    }
}

従来のJava IOでディレクトリの存在を確認する

ディレクトリの場合も同様に、File クラスの isDirectory メソッドを使って判定できます。

import java.io.File;

public class CheckFileExists {

    public static void main(String[] args) {

        File file = new File("/path/to/logs/");

        if(file.isDirectory()) {
            System.out.println("Logs directory exists");
        } else {
            System.out.println("Logs directory does not exist");
        }
    }
}

補足:注意点

Files.existsFile.exists は、ファイルが存在しない場合だけでなく、アクセス権限がないなどの理由で存在を確認できない場合にも false を返すことがあります。確実な判定が必要なケースでは、例外処理やエラーハンドリングもあわせて実装しておくと安心です。

  1. Javaで(階層的に)ディレクトリを作成するにはどうすればよいですか?

    Java 7以降なら Files.createDirectories() を使うJava 7から導入された Files クラスには、ファイルやディレクトリなどを操作するための静的メソッドが多数用意されています。その中の createDirectories() メソッドを使うと、指定したディレクトリを、まだ存在しない親ディレクトリも含めて一括で作成できます。途中の階層がいくつあっても、このメソッド1つですべて作成されるのが特徴です。サンプルコードimport java.io.IOException;import java.nio.file.Files;import java.nio.file.P

  2. Javaでディレクトリ階層を作成する方法|mkdirs()メソッドの使い方を解説

    java.ioパッケージに含まれるFileクラスは、システム上のファイルやディレクトリ(パス名)を表現するためのクラスです。このクラスには、ファイルやディレクトリに対してさまざまな操作を行うためのメソッドが数多く用意されています。 mkdir()メソッドを使用すると、現在のFileオブジェクトが表すパスにディレクトリを1つ作成できます。ただし、このメソッドは親ディレクトリが存在しない場合には失敗するという点に注意が必要です。 ディレクトリ階層を作成するには? 複数階層からなる新しいディレクトリ構造を一括で作成したい場合は、同じFileクラスのmkdirs()メソッドを使用します。このメソッドは