talosのプログラミング教室

Java Gold合格への道 ~Java I/O・Pathインタフェース~

スポンサーリンク

こんにちは。たろすです。

今回はJava I/OのPathインタフェースについて説明します。

Pathインタフェースとは

PathインタフェースはJava SE 7から追加されたファイルやディレクトリのパスを表すクラスです。

Java SE 6以前はFileクラスが用いられて気ましたが、様々な扱いにくさがありPathインタフェースが追加されました。

Pathインタフェースの主なメソッド

Path path = Paths.get("C:/aaa/bbb/ccc");

System.out.println("ルート:" + path.getRoot());
System.out.println("最下層のパス名:" + path.getFileName());
System.out.println("ルートを除くパス階層数:" + path.getNameCount());
System.out.println("パスの抜き出し:" + path.subpath(1, 2));
System.out.println("解決(絶対パス):" + path.resolve(Paths.get("D:/ddd")));
System.out.println("解決(相対パス):" + path.resolve(Paths.get("eee")));
System.out.println("親パスに対して解決(絶対パス):" + path.resolveSibling(Paths.get("D:/ddd")));
System.out.println("親パスに対して解決(相対パス):" + path.resolveSibling(Paths.get("eee")));

Path p0 = Paths.get("C:/aaa/./bbb/../ccc");
System.out.println("冗長なパスを正規化:" + p0.normalize());

Path p1 = Paths.get("C:/ddd/eee");
System.out.println("相対パスとして解決:" + path.relativize(p1));
ルート:C:\
最下層のパス名:ccc
ルートを除くパス階層数:3
パスの抜き出し:bbb
解決(絶対パス):D:\ddd
解決(相対パス):C:\aaa\bbb\ccc\eee
親パスに対して解決(絶対パス):D:\ddd
親パスに対して解決(相対パス):C:\aaa\bbb\eee
冗長なパスを正規化:C:\aaa\ccc
相対パスとして解決:..\..\..\ddd\eee

getRoot

パスのルートを返します。

getFileName

最下層のパス名を返します。

最下層がファイルではない場合も最下層のディレクトリ名を返すので注意しましょう。

パスがルートだけの場合はnullを返します。

getNameCount

ルートを除いたパス階層の数を返します。

パスがルートだけの場合は0を返します。

subpath

パスの一部を抜き出して返します。

resolve

指定されたパスを呼び出し元のパスに対して解決します。

具体的には、引数が絶対パスの場合は引数のパスがそのまま返されます。

相対パスの場合には呼び出し元のパスに引数のパスを結合したものを返します。

resolveSibling

引数のパスを呼び出し元の親パスに対して解決します。

具体的には、引数が絶対パスの場合は引数のパスがそのまま返されます。

相対パスの場合には呼び出し元の親パスに引数のパスを結合したものを返します。

normalize

パスに含まれる冗長な表現を正規化したパスを返します。

「.」はカレントディレクトリを表すため省略され、「..」は親ディレクトリを表すためひとつ上のディレクトリに戻ります。

relativize

呼び出し元のパスから引数のパスへの相対パスを返します。

おわりに

今回はJava I/OのPathインタフェースについて説明しました。