1. Path클래스

디스크에 있는 파일로 작업을 수행하는 프로그램을 작성하려는 경우 매우 쉽습니다. Java에는 파일 자체와 그 내용 모두에 대해 작업하는 데 도움이 되는 많은 클래스가 있습니다.

초기 버전의 Java는 File및와 같은 클래스를 사용하여 FileInputStream파일 작업을 수행했습니다. 그러나 이 File클래스는 이제 더 이상 사용되지 않으며 사용하지 않는 것이 좋습니다. 물론 코드, 메소드 매개변수 또는 클래스 생성자에서 여전히 이를 만날 수 있습니다.

처음부터 Path클래스를 사용하여 파일 작업 방법을 배우기 시작합니다. Path교체한 클래스입니다 File. 더 안전하고 효율적입니다.

Path수업

기술적으로 Path클래스가 아니라 인터페이스입니다. 이는 각 운영 체제(및 파일 시스템)에 대한 클래스의 자손 쓰기를 허용하기 위해 수행됩니다 Path.

Windows에는 파일 경로를 작성하기 위한 하나의 표준이 있고 Linux에는 또 다른 표준이 있습니다. 물론 세상에는 다른 많은 운영 체제가 있으며 각각 고유한 표준이 있습니다.

그렇기 때문에 Path파일 작업을 수행하는 메서드의 모든 곳에서 인터페이스가 사용되지만 실제로는 작업이 하위 클래스인 , , ...을 통해 발생 WindowsPath합니다 UnixPath.

Path개체 만들기

Path객체(실제로는 자손 클래스의 객체가 됨 )를 생성하려면 WindowsPath다음과 같은 명령문을 사용해야 합니다.

Path name = Path.of(path);

여기서 name는 변수의 이름 Path이고 는 path파일(또는 디렉토리)의 이름을 포함하는 파일(또는 디렉토리)의 경로입니다. 그리고 클래스 of의 정적 메서드입니다 Path.

이 메서드는 프로그램이 Windows에서 실행 중인 경우 개체를 of()만드는 데 사용됩니다 . WindowsPath프로그램이 Linux에서 실행되는 경우 UnixPath객체가 생성됩니다. 와 같은 코드를 사용하여 개체를 만들 수 없습니다 .Pathnew Path()

예:

암호 메모
Path file = Path.of("c:\\projects\\note.txt");
파일 경로
Path directory = Path.of("c:\\projects\\");
디렉토리 경로

Path유효한 객체가 존재하기 위해 파일(또는 디렉토리)이 존재할 필요는 없습니다 . 어쩌면 당신은 파일을 만들고 싶을 수도 있습니다... Path개체는 수프 업과 같습니다 String. 디스크의 특정 파일에 연결되지 않고 디스크의 특정 경로를 저장합니다. 그게 다야.


2. Path유형 의 방법

인터페이스 Path에는 몇 가지 흥미로운 방법이 있습니다. 가장 흥미로운 것은 아래 표에 나와 있습니다.

방법 설명
Path getParent()
상위 디렉토리를 반환
Path getFileName()
디렉토리 없이 파일 이름을 반환
Path getRoot()
경로에서 루트 디렉토리를 반환합니다.
boolean isAbsolute()
현재 경로가 절대 경로인지 확인
Path toAbsolutePath()
경로를 절대 경로로 변환
Path normalize()
디렉토리 이름에서 와일드카드를 제거합니다.
Path resolve(Path other)
절대 경로와 상대 경로에서 새 절대 경로를 생성합니다.
Path relativize(Path other)
두 개의 절대 경로에서 상대 경로를 가져옵니다.
boolean startsWith(Path other)
현재 경로가 주어진 경로로 시작하는지 확인
boolean endsWith(Path other)
현재 경로가 주어진 경로로 끝나는지 확인
int getNameCount()
/구분 기호로 경로를 여러 부분으로 나눕니다 .
부품 수를 반환합니다.
Path getName(int index)
/구분 기호로 경로를 여러 부분으로 나눕니다 .
인덱스로 부품을 반환합니다.
Path subpath(int beginIndex, int endIndex)
/구분 기호로 경로를 여러 부분으로 나눕니다 .
주어진 간격에 해당하는 하위 경로를 반환합니다.
File toFile()
객체를 더 이상 사용되지 않는 객체 Path로 변환File
URI toUri()
객체를 객체 Path로 변환URI

아래는 기존 방법에 대한 간략한 설명입니다.


3. 경로를 여러 부분으로 나누기

getParent()메서드는 현재 경로의 상위 디렉터리를 가리키는 경로를 반환합니다. 이 경로가 디렉토리인지 파일인지에 관계없이:

암호
String str = "c:\\windows\\projects\\note.txt";
Path path = Path.of(str).getParent();
"c:\\windows\\projects\\"
String str = "c:\\windows\\projects\\";
Path path = Path.of(str).getParent();
"c:\\windows\\"
String str = "c:\\";
Path path = Path.of(str).getParent();
null

getFileName()메서드는 단일 파일(또는 디렉터리) 이름을 반환합니다. 마지막 구분 기호 뒤에 오는 모든 이름:

암호
String str = "c:\\windows\\projects\\note.txt";
Path path = Path.of(str).getFileName();
"note.txt"
String str = "c:\\windows\\projects\\";
Path path = Path.of(str).getFileName();
"projects"
String str = "c:\\";
Path path = Path.of(str).getFileName();
null

getRoot()메서드는 루트 디렉터리의 경로를 반환합니다.

암호
String str = "c:\\windows\\projects\\";
Path path = Path.of(str).getRoot();
"c:\\"


4. 절대 및 상대 경로

경로에는 절대 경로와 상대 경로의 두 가지 유형이 있습니다. 절대 경로는 루트 디렉터리에서 시작합니다. Windows의 경우 c:\폴더일 수 있습니다. Linux의 경우 — /디렉토리

상대 경로는 일부 디렉토리에 대해 의미가 있습니다. 즉, 길의 끝과 같지만 시작은 없습니다. 상대 경로를 절대 경로로 또는 그 반대로 전환할 수 있습니다.

boolean isAbsolute()방법

이 메서드는 현재 경로가 절대 경로인지 확인합니다.

암호
String str = "c:\\windows\\projects\\note.txt";
boolean abs = Path.of(str).isAbsolute();
true
String str = "src\\com\\codegym\\Main.java";
boolean abs = Path.of(str).isAbsolute();
false

Path toAbsolutePath()방법

경로를 절대 경로로 변환합니다. 필요한 경우 현재 작업 디렉터리를 추가합니다.

암호
String str = "c:\\windows\\projects\\note.txt";
Path path = Path.of(str).toAbsolutePath();
"c:\\windows\\projects\\note.txt"
String str = "src\\com\\codegym\\Main.java";
Path path = Path.of(str).toAbsolutePath();
"d:\\work\\src\\com\\codegym\\Main.java"

Path normalize()방법

경로에서 디렉토리 이름 대신 ".."를 작성할 수 있습니다. 이는 한 디렉토리로 돌아가는 것을 의미합니다 . 정규화는 이러한 것들을 제거합니다. 예:

암호
String str = "c:\\windows\\..\\projects\\note.txt";
Path path = Path.of(str).normalize();
"c:\\projects\\note.txt"
String str = "src\\com\\codegym\\..\\Main.java";
Path path = Path.of(str).normalize();
"src\\com\\Main.java"

Path relativize(Path other)방법

relativize()방법을 사용하면 "경로 간의 차이"를 구성할 수 있습니다. 하나의 경로는 다른 경로에 상대적입니다.

암호
Path path1 = Path.of("c:\\windows\\projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path2.relativize(path1);
"projects\\note.txt"
Path path1 = Path.of("c:\\windows\\projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path1.relativize(path2);
"..\\.."
Path path1 = Path.of("c:\\aaa\\bbb\\1.txt");
Path path2 = Path.of("d:\\zzz\\y.jpg");
Path result = path1.relativize(path2);
IllegalArgumentException:
두 경로는 다른 "루트"(다른 디스크)를 가집니다.

Path resolve(Path other)방법

resolve()메서드는 반대 작업을 수행합니다 relativize(). 절대 경로와 상대 경로에서 새 절대 경로를 만듭니다.

암호
Path path1 = Path.of("projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path1.resolve(path2);
"c:\\windows"
Path path1 = Path.of("projects\\note.txt");
Path path2 = Path.of("c:\\windows\\");
Path result = path2.resolve(path1);
"c:\\windows\\projects\\note.txt"

toFile()방법

이 메서드는 개체 File와 동일한 파일 경로를 저장하는 더 이상 사용되지 않는 개체를 반환합니다 Path.

toURI()방법

이 메소드는 경로를 표준 URI 로 변환 하고 파일 경로를 포함하는 객체를 반환합니다.

파일 경로 파일에 대한 URI
c:\windows\projects\note.txt
file:///c:/windows/projects/note.txt