LoginSignup
1

More than 3 years have passed since last update.

Pathを利用した状況で相対パスを求めたい

Last updated at Posted at 2019-05-05

さほど頻度は高くないと思いますが、とあるパスを起点として、別のパスの相対パスを求めたいということがあります。Java7以降では、ファイル操作(もといパス操作)にjava.nio.file.Pathを利用することが多いと思いますが、Pathを利用している状況で相対パスを求めたいという場合にはPath::relativizeを使用します。

JavaDocは次のURLになります: https://docs.oracle.com/javase/jp/8/docs/api/java/nio/file/Path.html#relativize-java.nio.file.Path-

APIの使い方がややわかりづらいのですが、相対パスを求めたいパスを引数に、起点としたいパスをレシーバにそれぞれ指定します。

以下はディレクトリ/a/b/c/directoryを起点としてファイル/a/b/c/directory/e/fileの相対パスを求めるサンプルです。なおファイル/a/b/c/directory/e/fileはディレクトリ/a/b/c/directoryに格納されているという想定になります。

package main;

import java.nio.file.Paths;

public class Main {
    public static void main(String[] args) {
        var directory = Paths.get("/a/b/c/directory");
        var file = Paths.get("/a/b/c/directory/e/file");

        System.out.println(directory.relativize(file)); // => e\file
    }    
}

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1