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オブジェクトを要求している場合などに変換すると良いと思います。