programing

Java에서 getPath(), getAbsolutePath() 및 getCanonicalPath()의 차이점은 무엇입니까?

prostudy 2022. 7. 27. 21:40
반응형

Java에서 getPath(), getAbsolutePath() 및 getCanonicalPath()의 차이점은 무엇입니까?

차이가 있나요?getPath(),getAbsolutePath() , , , , 입니다.getCanonicalPath()★★★★★★★★★★★★★★★★★?

그리고 각각은 언제 사용하나요?

다음의 파일명을 고려해 주세요.

C:\temp\file.txt 경로, - 아, 아, 아, 아, 아, 아, 아, 아이다.

.\file.txt- 이 경로입니다절대 경로도 아니고 표준 경로도 아닙니다.

C:\temp\myapp\bin\..\\..\file.txt길입니다. - 이 길은 절대적인 길입니다.이건 정식 경로가 아니야

표준 경로는 항상 절대 경로입니다.

경로에서 표준 경로로 변환하면 절대 경로로 변환됩니다(일반적으로 현재 작업 디렉토리에서 고정됨). ./file.txt becomes가 되다c:/temp/file.txt "정리"하고, "정리", "정리"하고, "정리"하고, "정리"를..\(유닉스 상의) 심볼링크 해결.

또한 nio를 사용한 다음 예에 유의하십시오.경로:

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

제가 발견한 가장 좋은 방법은 다음과 같은 것들을 시험해 보는 것입니다.

import java.io.File;
public class PathTesting {
    public static void main(String [] args) {
        File f = new File("test/.././file.txt");
        System.out.println(f.getPath());
        System.out.println(f.getAbsolutePath());
        try {
            System.out.println(f.getCanonicalPath());
        }
        catch(Exception e) {}
    }
}

출력은 다음과 같습니다.

test\..\.\file.txt
C:\projects\sandbox\trunk\test\..\.\file.txt
C:\projects\sandbox\trunk\file.txt

so,는,getPath()는 File 오브젝트를 이 오브젝트는 상대적일 도 있고 않을 수도 .File은 상대적일 수도 있습니다.이 객체는 상대적일 수도 있고 그렇지 않을 수도 있습니다.getAbsolutePath()파일에 절대 를 제공합니다.또, 「파일의 절대 경로」를 .getCanonicalPath()는 파일에 대한 고유한 절대 경로를 제공합니다.동일한 파일을 가리키는 절대 경로는 매우 많지만 표준 경로는 하나뿐입니다.

각각언 ?제 용? ??? 두 개가 두 , 두 개로 나누어야 합니다.Files디스크상의 같은 파일을 가리키고 있기 때문에, 그 표준 패스를 비교할 수 있습니다.아, 아, 아, 아, 아, 아, 아, 아, 아, 아.

요컨대:

  • getPath() 스트링의 을 가져옵니다.File오브젝트는 로 구성되었으며 상대적인 현재 디렉토리일 수 있습니다.
  • getAbsolutePath()상대적인 경우 현재 디렉토리에 대해 경로 문자열을 해결한 후 경로 문자열을 가져오므로 완전 수식 경로가 됩니다.
  • getCanonicalPath()해, 상대 「」, 「」, 「」, 「」)을 모두 합니다.. ★★★★★★★★★★★★★★★★★」..파일 시스템이 가리키는 파일 시스템 개체를 참조하기 위한 표준 수단이라고 간주하는 경로를 반환하는 파일 시스템 링크) 및 모든 파일 시스템 링크.

각 에는, 하는 「파일」의 「의 대응이 .File★★★★★★ 。

IMO, Java는 "절대" 경로 구현을 잘못했습니다. 절대 경로에서 상대 경로 요소를 제거해야 합니다.그런 다음 표준 형식은 경로 내의 FS 링크 또는 접합을 삭제합니다.

getPath()를 작성하기 위해 사용한 경로를 반환합니다.File물건.이 반환값은 실행되는 위치에 따라 변경되지 않습니다(아래 결과는 창에 대한 것이며 구분 기호는 다른 곳에 있는 것이 분명합니다).

File f1 = new File("/some/path");
String path = f1.getPath(); // will return "\some\path"

File dir = new File("/basedir");
File f2 = new File(dir, "/some/path");
path = f2.getPath(); // will return "\basedir\some\path"

File f3 = new File("./some/path");
path = f3.getPath(); // will return ".\some\path"

getAbsolutePath()는 실행 장소 또는 드라이브를 기반으로 경로를 해결합니다.그래서 만약 도망친다면c:\test:

path = f1.getAbsolutePath(); // will return "c:\some\path"
path = f2.getAbsolutePath(); // will return "c:\basedir\some\path"
path = f3.getAbsolutePath(); // will return "c:\test\.\basedir\some\path"

getCanonicalPath()는 시스템에 의존합니다.패스가 나타내는 일의의 로케이션이 해결됩니다.따라서 경로에 " " 가 있으면 일반적으로 삭제됩니다.

언제 사용할지.그것은 당신이 무엇을 이루려고 노력하느냐에 달려있다. getPath()는 휴대성에 도움이 됩니다. getAbsolutePath()는 파일 의 위치를 검색할 때또, 「파일 시스템의 장소」도 할 수 있습니다.getCanonicalPath()는, 2개의 하는 경우에 합니다.

해야 할 은 '아주머니'가 '아주머니'라는 입니다.File 이름으로 Sun의 '계층 경로 이름'과 같은 의하려고 합니다.c:/foo.txt ★★★★★★★★★★★★★★★★★」/usr/muggins이 때문에, 패스의 관점에서 파일을 작성합니다.설명하는 작업은 모두 이 "경로 이름"에 대한 작업입니다.

  • getPath()를 가져옵니다( 「」 「」 「」 。../foo.txt)
  • getAbsolutePath()인 경우 됩니다( 「 」 、 「 」 。/usr/bobstuff/../foo.txt)
  • getCanonicalPath() 는 파일에 대한 절대 경로의 고유한 표현을 가져오려고 합니다.이것에 의해, 「..」및 「」의 참조로부터의 간접은 불필요하게 됩니다(/usr/foo.txt를 참조해 주세요.

주의: 표준 경로를 형성할 때 VM은 다음 명령을 실행할 수 있습니다.IOException이 문제는 보통 파일 시스템 조작을 몇 가지 수행하고 있기 때문에 발생합니다.이 중 하나가 실패할 수 있습니다.

거의 것을 되었다.getCanonicalPath() Windows 로 8을 가지는 되어 있는 는, Windows 의 「DOS 8.3」입니다.java.io.tmpdir시스템 속성이 반환되면 이 메서드는 "full" 파일 이름을 반환합니다.

언급URL : https://stackoverflow.com/questions/1099300/whats-the-difference-between-getpath-getabsolutepath-and-getcanonicalpath

반응형