UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【Java】Path.resolveを使ってパスを結合する

2つのパスを結合したい時にはPath.resolveを使えば良いことを知った

docs.oracle.com

Path.resolveの簡単な使い方

Path path1 = Paths.get("/Users/user/Documents");
Path path2 = Paths.get("file.txt");

Path resolvedPath = path1.resolve(path2);

System.out.println(resolvedPath); // /Users/user/Documents/file.txt

path1にpath2を結合最終的に、C:\folder1\folder2\file.txtresolvedPathに格納される

引数には相対パス絶対パスを受け取ることができる

Path path1 = Paths.get("/Users/user/Documents");
Path path2 = Paths.get("folder2/file.txt");
Path path3 = Paths.get("/folder3/file.txt");

Path resolvedPath1 = path1.resolve(path2);
Path resolvedPath2 = path1.resolve(path3);

System.out.println(resolvedPath1); // /Users/user/Documents/folder2/file.txt
System.out.println(resolvedPath2); // /folder3/file.txt

相対パスの場合は、結合したパスが生成されるが、絶対パスの場合は、絶対パスが維持される

Path.resolveSibling

Path.resolveSiblingを使った結合もあることを知った

これはパスの親ディレクトリを基準に、新しいPathオブジェクトを作成することができる

使い方はこのような感じ

Path path1 = Paths.get("/Users/user/Documents/file.txt");

Path resolvedPath1 = path1.resolveSibling("newfile.txt");
Path resolvedPath2 = path1.resolveSibling("../newdir/newfile.txt");

System.out.println(resolvedPath1); // /Users/user/Documents/newfile.txt
System.out.println(resolvedPath2); // /Users/user/newdir/newfile.txt

../newdir/newfile.txtのように相対パスにすると、path1のfile.txtの1つ上のディレクトリから相対パスに従ったパスと結合する