File.getCanonicalPath() と File.getAbsolutePath() の違い2008年06月25日 18時26分47秒

javadoc でこの二つの説明を読むと、とても回りくどく書かれている。「この抽象パス名の正規のパス名文字列を返します。」とあっても良く判らない。

そこで、もっと詳しい説明を見る事になる。「正規のパス名は、一意の絶対パスです。正規のパス名の正確な定義は、システムに依存します。」どうも、一意かどうかが、getCanonicalPath と getAbsolutePath の大きな違いらしい。しかも、システム依存とくるから不安に拍車がかかる。

さらに読み進めると「パス名から "." や ".." などの冗長名を削除し、シンボリックリンクを解決し (UNIX プラットフォームの場合)、ドライブ名の大文字小文字を適切に変換し (Microsoft Windows プラットフォームの場合) ます。」とある。この文章がいつも混乱の元になる。絶対パス名なのに、なぜ、"." や ".." などを削除するのかと。絶対パス名なら、本来これを含まないので、どの様な絶対パスなのかと混乱に陥る。

結局のところ、getCanonicalPath は リンクを追跡する getAbsolutePath だ。