25

重複の可能性:
JavaのgetPath()、getAbsolutePath()、およびgetCanonicalPath()の違いは何ですか?

これら2つの違いはありますか?

canonicalpathとabsolutepath?

違いがある場合は、実際の例が必要になります。

4

3 に答える 3

33

違いは、ファイルへの正規パスが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がコメントで指摘しているように、ファイルシステムがハードリンクされたディレクトリをサポートしている場合、特定のファイルへの複数の正規パスが存在する可能性があります。

于 2012-07-15T01:51:40.847 に答える
9

これが正規のパスです。

C:/files/foo.txt

これが絶対パスです

  • C:/files/FOO.TXT

  • C:/files/FOO.txt

  • C:/files/foo.TXT

  • C:/FILES/FOO.TXT

正規パスは、ファイルへの絶対的な一意のパスです。ファイルには、1つの正規パスと多数の絶対パスのみを含めることができます。

ファイルには、ファイルのファイルパスである正規パスを1つだけ含めることができます。ファイルには、ファイルへの多くの絶対パスを含めることができます。

于 2012-07-15T02:17:59.787 に答える
0

ファイルへの絶対パスは多数存在する可能性があります。ただし、ファイルへの正規パスは1つだけです。これを読む

于 2012-07-15T01:49:29.067 に答える