いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Java 1.7でjava.nioに追加されたFilesクラスとPathsクラス (readAllBytes, readAllLines, Paths.get)


最近、凄く久しぶりのJava開発してるのですが、1.7で導入された便利なクラスが
あったので、忘れないうちにメモメモ。try-with-resourceとか便利になりましたねー。


1.7より、java.nioに

java.nio.file

パッケージというのが導入されました。


そのパッケージの中に

java.nio.file.Files

クラスというのがありまして、ファイルやディレクトリに関する操作を
集めたユーティティクラスとなっています。メソッドは全部staticです。


readAllBytesとか.NETやってる人にはおなじみのメソッドとかがあります。
小さなファイルのデータを読み取りたいだけなのに、前まではいつものやり方で
データを読み取るコードを記述する必要がありましたが、Filesクラスを利用すれば

byte[] bytes = Files.readAllBytes(Paths.get(...));

で一発でとれます。便利。


あと、シンボリックリンクかどうか判定(isSymbolicLink)できたり
リンクを作成(createSymbolicLink)できたり
ファイルツリーを辿る(walkFileTree)ことができたりもします。


Filesクラスの各メソッドには、パスを表すPathクラスのオブジェクトを
渡す必要があります。このクラスも、1.7から追加されたクラスです。
Pathオブジェクトを取得するには

java.nio.file.Paths

クラスのgetメソッドを利用して取得します。
例えば、以下はユーザのホームディレクトリのPathオブジェクトを
取得します。

Path thePath = Paths.get(System.getProperty("user.home"))


なので、特定のファイルのデータを一気に読み取るには

byte[] bytes = Files.readAllBytes(Paths.get(System.getProperty("user.home"), "test.dat"));

みたいに記述したら取得できます。


Pathクラス (Pathsじゃなくて)の方には、.NETでいうFileSystemWatcherクラスと
同じような機能を持つregisterメソッドも存在します。これを利用するとファイルの作成・変更・削除の
タイミングを監視することが出来ます。

================================
過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。