Java7で導入されたNIO.2(java.nio.file, java.nio.file.attribute)
File I/O (Featuring NIO.2) (The Java™ Tutorials > Essential Classes > Basic I/O)
からのひしだまさん。
Javaファイル関連メモ2(Hishidama's Java Files Memo)
これで満足。なのだけど、折角勉強したので自分でもちょっと書いとこっと。
今日はPathについて。
Paths / Path
Pathがファイルを指すインターフェイスなわけすね。
Paths
PathsはPathオブジェクトを生成するためのヘルパークラス。っても、2個しかメソッドないんやね。
文字列からとURIから。
Path p1 = Paths.get("/tmp/foo"); Path p3 = Paths.get(URI.create("file:///Users/joe/FileTest.java"));
フラグメントからも
Path p5 = Paths.get(System.getProperty("user.home"),"logs", "foo.log");
相対パスの場合は、カレントディレクトリに対するものになるすね。
情報取得
だいたい名前で想像できる通りですな。
Pathフラグメントで保持しててsubpathがとれたりIterableだったりするみたい。
normalizeメソッド
"aaa/."とか"bbb/.."とかの表現をノーマライズする。
(これをredundant(冗長)な名前って呼ぶんやね。)
Path path = Paths.get("/aaa/bbb/../ccc"); assertThat(path.normalize().toString(), is("/aaa/ccc")); Path path2 = Paths.get("/aaa/bbb/./ccc"); assertThat(path2.normalize().toString(), is("/aaa/bbb/ccc"));
注意点としては。normalizeはファイルシステムをチェックしなくて単純にシンタックスの処理をするだけなので。
シムリンクとかは考慮されないよ。って。
Convert系
- toUriはURIに。
- toFileはFileに。
- toAbsolutePathは絶対パスのPathオブジェクトに。ファイルは存在せんでもいい。
- toRealPathは存在するファイルのPathを返す。
だってー。面白いね。
Pathの結合
Path path = Paths.get("/aaa/bbb"); assertThat(path.resolve("ccc").toString(), is("/aaa/bbb/ccc"));
絶対パスを渡すときは注意しときたいね。
Path path = Paths.get("/aaa/bbb"); assertThat(path.resolve("/ccc").toString(), is("/ccc"));
relativize
2つのPathの間のPathを作るんだって。僕はあんまり使わなさそうかな。
Path p1 = Paths.get("home"); Path p3 = Paths.get("home/sally/bar"); Path p1_to_p3 = p1.relativize(p3); assertThat(p1_to_p3.toString(), is("sally/bar")); Path p3_to_p1 = p3.relativize(p1); assertThat(p3_to_p1.toString(), is("../.."));
Watchable
Watchableインターフェイスを実装してるぽいんだけど。時間切れだ。また次回!