1. ホーム

[解決済み] Javaで2つの絶対パス(またはURL)から相対パスを構築するにはどうすればよいですか?

2022-03-29 17:15:45

質問

2つの絶対パスがある場合、例えば

/var/data/stuff/xyz.dat
/var/data

2番目のパスをベースとする相対パスはどのように作成すればよいのでしょうか。上の例では、結果は次のようになるはずです。 ./stuff/xyz.dat

どのように解決するのですか?

少し回りくどいですが、URIを使ってみてはいかがでしょうか? URIにはrelativizeというメソッドがあり、必要なチェックをすべて行ってくれる。

String path = "/var/data/stuff/xyz.dat";
String base = "/var/data";
String relative = new File(base).toURI().relativize(new File(path).toURI()).getPath();
// relative == "stuff/xyz.dat"

ファイルパスには java.nio.file.Path#relativize で指摘されているように、Java 1.7以降では Jirka Meluzin もうひとつの答え .