Path.resolve() 메서드
주어진 경로를 현재 경로에 상대적인 경로로 해석하여 새로운 경로를 생성하는 데 사용함.
현재 경로를 기준으로 상대 경로를 합쳐서 절대 경로를 얻을 수 있음.
이게 뭔소리야??
path.resolve(otherPath) 와 같이 사용하며
path는 현재 경로를 나타내는 Path 객체이고, otherPath는 상대 경로를 나타내는 Path 또는 문자열이다.
otherPath가 절대경로인 경우 otherPath를 반환하고, 상대경로인 경우 현재경로에 otherPath를 결합한 새로운 경로를 반환.
package 입출력;
import java.nio.file.Path;
import java.nio.file.Paths;
public class pathResolve {
public static void main(String[] args) {
// 현재경로
Path currentPath = Paths.get("C:\\Users\\index\\Desktop\\springBoot");
// 상대경로
Path relativePath = Paths.get("files/example.txt");
// resolve() 메서드를 사용해서 새로운 경로 생성
Path resolvedPath = currentPath.resolve(relativePath);
// 결과 : user\index\Desktop\springBoot\file\example.txt
System.out.println("현재경로 : " + currentPath);
System.out.println("상대경로 : " + relativePath);
System.out.println("결과경로 : " + resolvedPath);
System.out.println();
// 절대경로
Path absolutePath = Paths.get("/data/example.txt");
System.out.println("절대경로 : " + absolutePath);
Path resolvedAbsolutePath = currentPath.resolve(absolutePath);
// resolve()를 사용해서 절대경로를 합쳐도 절대경로는 그대로 유지된다
System.out.println("결과경로 : " + resolvedAbsolutePath);
}
}
Path.resolve() 메서드 활용
상대 경로를 절대 경로로 변환 : 현재 디렉토리를 기준으로 상대적 파일 경로를 받아와서 절대경로로 변환할 수 있음
복잡한 경로 생성 : 여러 경로를 조합하여 복잡한 파일 경로를 생성할 때 유용함
경로 관련 작업 자동화 : 파일 시스템 관련 자동화를 할 때 경로를 동적으로 구성해야하는 경우 유용함
주의사항
resolve() 메서드는 현재 경로를 기준으로 상대 경로를 합쳐서 새로운 경로 생성
resolve() 메서드의 인수로 절대 경로가 주어지면, 현재 경로는 무시되고 절대 경로가 그대로 사용된다
☆ Paths.get(System.getProperty("user.dir"))에 대해서
System.getProperty("user.dir") : 현재 실행중인 디렉토리의 위치를 알 수 있음
System.getProperty("user.home")은 사용자의 디렉토리를 나타낸다.
package com.sprint.mission.discodeit.repository.file;
import com.sprint.mission.discodeit.entity.User;
import java.nio.file.Path;
import java.nio.file.Paths;
public class pathTest {
public static void main(String[] args) {
Path DIRECTORY = Paths.get(System.getProperty("user.dir"),"file-data-map", User.class.getSimpleName());
System.out.println("Paths.get : " + DIRECTORY);
Path DIRECTORY2 = Paths.get(System.getProperty("user.home"));
System.out.println("Paths.home : " + DIRECTORY2);
}
}
결과
Paths.get : C:\Users\index\Desktop\붕어빵\붕어빵이에요\자바붕어빵\1-sprint-mission\file-data-map\User
Paths.home : C:\Users\index
DIRECTORY가 C:\Users\index 를 반환한다고 하자.
private Path resolvePath(UUID id) {
return DIRECTORY.resolve(id + EXTENSION);
}
이걸 한번 실행해보자.. 이게 대체 뭔지..
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.UUID;
public class pathTest {
Path DIRECTORY = Paths.get(System.getProperty("user.dir"),"file-data-map", User.class.getSimpleName());
private String EXTENSION = "sir";
private Path resolvePath(UUID id) { // 여기에 resolve() 메서드를 넣는다
return DIRECTORY.resolve(id + EXTENSION);
}
public static void main(String[] args) {
Path resolvePath2 = new pathTest().resolvePath(UUID.randomUUID());
System.out.println(resolvePath2);
}
}
결과 (매우중요)
C:\Users\index\Desktop\붕어빵\붕어빵이에요\자바붕어빵\1-sprint-mission\file-data-map\User\fc698364-90c2-4081-9ce1-b19601e43847sir
file-data-map\user\UUID 라고 생각하면
resolvePath()의 리턴값은 DIRECTORY.resolve(id + EXTENSION)이니까
DIRECTORY의
Paths.get(System.getProperty("user.dir"),"file-data-map", User.class.getSimpleName()) 를 먼저 출력하고
이후에 UUID인 id를 출력한 후 뒤에 EXTENSION인 "sir"을 출력했다.
정리하면..
내가 resolvePath() 메서드를 사용한다는건 DIRECTORY의 뒤에 id와 sir을 붙여서 위치를 출력하는것으로 보인다.
직렬화를 활용해서 InputStream과 OutputStream을 활용해서 사용자의 정보가 담긴 DIRECTORY 내부를 쓰는것 같음
'JAVA' 카테고리의 다른 글
| 재귀호출(recursive call) (1) | 2025.07.20 |
|---|---|
| 날짜와 시간 & 형식화 - Instant (0) | 2025.06.25 |
| I/O - File 예제 (3) | 2025.06.20 |
| 네트워킹 - URL, URI (0) | 2025.06.20 |
| I/O - File(Path 공부) (0) | 2025.06.19 |