さほど頻度は高くないと思いますが、とあるパスを起点として、別のパスの相対パスを求めたいということがあります。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
}
}