Javaの勉強8 におつー Path

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だったりするみたい。

f:id:bufferings:20141127083351p:plain

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系

f:id:bufferings:20141127084800p:plain

  • toUriはURIに。
  • toFileはFileに。
  • toAbsolutePathは絶対パスのPathオブジェクトに。ファイルは存在せんでもいい。
  • toRealPathは存在するファイルのPathを返す。

だってー。面白いね。

Pathの結合

f:id:bufferings:20141127090049p:plain

        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インターフェイスを実装してるぽいんだけど。時間切れだ。また次回!

今日のIntelliJ IDEA

ショートカットが覚えられない!って言ったら、後輩に「おい先輩、Eclipse Keymapがあるじゃろ」って言われて、やってみて感動した!