「.」や「..」などのパスの中の冗長な部分を取り除く(Path.normalize)

Path クラスで用意されている normalize メソッドを使用すると、 Path オブジェクトが持つパスの情報の中で「.」や「..」などが含まれている場合に、含まれない形に変更したパスに変更した新しい Path オブジェクトを取得できます。ここでは Java を使ってパスの中から「.」や「..」などの冗長な部分を取り除く方法について解説します。

(Last modified: )

パスの中の冗長な部分を取り除く

パスの中で「.」はカレントディレクトリを表します。よって次の 2 つのパスは同じです。

./img/profile.jpg
img/prifile.jpg

またパスの中で「..」は親ディレクトリを表します。よって次の 2 つのパスは同じです。

data/doc/../pdf/report.pdf
data/pdf/report.pdf

Path クラスで用意されている normalize メソッドを使用すると、 Path オブジェクトが持つパスの情報の中に「.」や「..」が含まれていた場合に、含まれない形のパスに変換した上で、変換後のパスの情報を持つ新しい Path オブジェクトにして返してくれます。 normalize メソッドの書式は次の通りです。

Path normalize()

戻り値:
結果のパスまたはこのパスに冗長な名前要素が含まれていない場合はそのパス。このパスにルート・コンポーネントがなく、すべてのname要素が冗長である場合は、空のパスが返されます

メソッドを実行すると、対象の Path オブジェクトから「.」や「..」が取り除かれたパスの情報を持つ新しい Path オブジェクトを返します。

次のサンプルを見てください。

Path p1 = Paths.get("./img/profile.jpg");
Path p2 = Paths.get("data/doc/../pdf/report.pdf");

System.out.println(p1.normalize());  // img/profile.jpg
System.out.println(p1.normalize());  // data/pdf/report.pdf

冗長な部分を取り除いたパスの情報をもつ新しい Path オブジェクトを取得することができました。

サンプルコード

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample15-1.java という名前で保存します。

import java.nio.file.Path;
import java.nio.file.Paths;

class JSample15_1{
  public static void main(String[] args){
    Path p1 = Paths.get("./doc/report.txt");
    Path p2 = Paths.get("C:/document/doc/../pdf");

    System.out.println(p1 + " -> " + p1.normalize());
    System.out.println(p2 + " -> " + p2.normalize());
  }
}

コンパイルを行います。

javac -encoding UTF-8 JSample15_1.java

その後で、次のように実行してください。

java JSample15_1

パスの中の冗長な部分を取り除く(1)

パスの中に含まれる「.」や「..」などの冗長な部分を取り除いたパスを取得することができました。

-- --

Java を使ってパスの中から「.」や「..」などの冗長な部分を取り除く方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。