重複の可能性:
JavaのgetPath()、getAbsolutePath()、およびgetCanonicalPath()の違いは何ですか?
これら2つの違いはありますか?
canonicalpathとabsolutepath?
違いがある場合は、実際の例が必要になります。
重複の可能性:
JavaのgetPath()、getAbsolutePath()、およびgetCanonicalPath()の違いは何ですか?
これら2つの違いはありますか?
canonicalpathとabsolutepath?
違いがある場合は、実際の例が必要になります。
違いは、ファイルへの正規パスが1つしかないことです[1]が、ファイルへの絶対パスは多数存在する可能性があります(システムによって異なります)。たとえば、Unixシステムで/usr/local/../bin
は、はと同じ/usr/bin
です。getCanonicalPath()
これらのあいまいさを解決し、(一意の)正規パスを返します。したがって、現在のディレクトリが/usr/local
、の場合、次のようになります。
File file = new File("../bin");
System.out.println(file.getPath());
System.out.println(file.getAbsolutePath());
System.out.println(file.getCanonicalPath());
印刷します:
../bin
/usr/local/../bin
/ usr / bin
Vooの提案によると:UnixシステムでgetCanonicalPath()
は、シンボリックリンクが存在する場合はシンボリックリンクも解決します。ハードリンクは通常のファイルのように扱われます(これは基本的にはファイルです)。ただし、これらのメソッドが成功するためにファイルが存在する必要はないことに注意してください。
[1] ええ、そうではありません。@Tom Haleがコメントで指摘しているように、ファイルシステムがハードリンクされたディレクトリをサポートしている場合、特定のファイルへの複数の正規パスが存在する可能性があります。
これが正規のパスです。
C:/files/foo.txt
これが絶対パスです
C:/files/FOO.TXT
C:/files/FOO.txt
C:/files/foo.TXT
C:/FILES/FOO.TXT
正規パスは、ファイルへの絶対的な一意のパスです。ファイルには、1つの正規パスと多数の絶対パスのみを含めることができます。
ファイルには、ファイルのファイルパスである正規パスを1つだけ含めることができます。ファイルには、ファイルへの多くの絶対パスを含めることができます。
ファイルへの絶対パスは多数存在する可能性があります。ただし、ファイルへの正規パスは1つだけです。これを読む