1. ホーム
  2. java

[解決済み] JavaでgetPath()、getAbsolutePath()、getCanonicalPath()はどう違うのですか?

2022-03-16 16:40:05

質問

とはどう違うのですか? getPath() , getAbsolutePath() および getCanonicalPath() をJavaで使うのですか?

また、それぞれどのような場合に使用するのでしょうか?

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

これらのファイル名について考えてみましょう。

C:\temp\file.txt - これは、パス、絶対パス、カノニカルパスです。

.\file.txt - これはパスです。絶対パスでも正規のパスでもない。

C:\temp\myapp\bin\..\\..\file.txt - これはパスであり、絶対パスである。正規のパスではありません。

正規のパスは常に絶対パスです。

パスから正規パスに変換すると、絶対パスになります(通常、現在の作業ディレクトリにタックするので、例. ./file.txt は次のようになります。 c:/temp/file.txt ). ファイルの正規パスは、単にパスを浄化するもので、次のようなものを削除して解決します。 ..\ とシンボリックリンクを解決する(Unixの場合)。

また、nio.Pathsを使った次の例にも注目してください。

String canonical_path_string = "C:\\Windows\\System32\\";
String absolute_path_string = "C:\\Windows\\System32\\drivers\\..\\";

System.out.println(Paths.get(canonical_path_string).getParent());
System.out.println(Paths.get(absolute_path_string).getParent());

どちらのパスも同じ場所を参照していますが、出力は全く異なるものになります。

C:\Windows
C:\Windows\System32\drivers