nologyance.net

日々のアウトプット

Javaでファイルやディレクトリを扱う

Java8以降でファイルとディレクトリを方法には大きく2パターンが存在します。

Fileクラスを使う

Fileという名前ですが、実際にはディレクトリもこのクラスで扱います。

以下のようなディレクトリ構造があったすると

/hoge/huga/sample2.txt
          /sample.txt
File file = new File("/hoge/huga");

System.out.print(file.list()); // ['sample2']

System.out.print(file.getParent().list()); // ['huga', 'sample.txt']

ディレクトリを辿ったり、ディレクトリに存在するファイルやディレクトリを羅列したりすることができます。

当然、ファイルやディレクトリの作成、削除、権限変更なんかもできます。

FilesとPathクラスを使う

Java7で新しく追加されたクラスです。

Pathはファイルやディレクトリを、Filesはそれらに対する操作を責務とします。

Fileのときの例と比較してみましょう。

Path path = Paths.get("/hoge/huga");

Files.list(path).forEach(System.out::print); // sample2

Files.list(path.getParent()).forEach(System.out::print); // huga sample.txt

Files.list(Path)はStreamオブジェクトを返すのでStreamAPIが使えます。

配列やListで扱いたい場合は、それぞれのオブジェクトに変換する必要があります。

相互に変換する

PathオブジェクトとFileオブジェクトはそれぞれPath.toFileとFile.toPathメソッドで変換することができます。

両方入り混じっていると分かりづらいので、スクラッチで組む部分はFilesとPathで書いて、外部ライブラリなどがFileオブジェクトを要求している場合などに変換すると良いと思います。