Java

[Java] resource 디렉토리의 경로 가져오기

에드박 2021. 8. 28. 15:48

자바 애플리케이션은 resource 디렉토리에 정적 파일을 저장합니다.

이 때 파일의 경로를 알기 위해서는 resource 디렉토리의 경로가 필요합니다.

 

이 때 resource 디렉토리의 경로를 가져오기 위해 ClassLoader를 활용합니다.

꼭 클래스 로더에 대한 지식이 필요하진 않습니다. 다만 궁금하신 분은 이 글을 읽어주세요!


resource 디렉토리의 경로 가져오기

resource의 디렉토리를 가져오기 위해 ClassLoader에 있는 getResource() 메소드를 사용합니다.

public URL getResource(String name)

이 메소드는 주어진 이름을 가진 자원을 찾으려고 시도합니다.

먼저 리소스의 상위 클래스 로더에 위임합니다. 부모가 null 이면 가상 머신에 빌드된 클래스 로더의 경로를 검색합니다.

실패하면 메서드는 findResource(String)  호출 하여 리소스를 찾습니다. 입력으로 지정된 리소스 이름은 classpath에 대해 상대적이거나 절대적일 수 있습니다.

리소스를 읽기 위한 URL 개체를 반환하거나 리소스를 찾을 수 없거나 호출자가 리소스를 반환할 수 있는 적절한 권한이 없는 경우 null을 반환합니다.

Java는 클래스 경로에서 리소스를 로드한다는 점에 유의하는 것이 중요합니다.

마지막으로 Java에서 리소스 로드 는 환경이 리소스를 찾도록 설정되어 있는 한 코드가 실행되는 위치가 중요하지 않기 때문에 위치가 독립적인 것으로 간주됩니다. 즉 Java 환경이 리소스를 찾도록 설정되어 있다면 어느 위치에서 실행하든 위치와 관계없이 실행됩니다. 

 

따라서 resource의 디렉토리 경로를 가져오기 위해서는 다음과 같이 할 수 있습니다.

 

URL resource = getClass().getClassLoader().getResource("리소스 이름");
String filePath = resource.getFile();

 


파일의 내용 읽기

리소스의 경로를 알아냈다면 파일의 내용을 읽을 수 있습니다.

 

URL resource = getClass().getClassLoader().getResource("리소스 이름") 로 리소스의 경로를 가져왔습니다.

 

Path path = new File(resource.getPath()).toPath();

 

List<String> contents = Files.readAllLines(path);

 

이렇게 진행하시면 파일 안에있는 모든 라인을 읽습니다. 단 Files.readAllLines() 메서드 내부적으로 UTF-8 로 디코딩을 진행합니다.