-jar resources folder 접근 java.nio.file.NoSuchFileException 해결

2024-02-16


사진: Unsplash 의 NEOM


1.  문제 발생

 

IDE에서는 src/main/.../test.properties 이런 식으로 사용해도 문제없이 동작을 했지만 -jar 파일로 생성 후 해당 부분을 그대로 쓰면 java.nio.file.NoSuchFileException 가 발생하게 된다. 


2. 원인

 

배포시에 src/main/resources의 루트 경로가 target/classes 또는 build/classes로 변경되게 된다. 이를 위해 리소스 파일을 읽어 올 때는 동적으로 root를 잡을 수 있게 코드를 수정해야 한다.


3. 해결 방법

 

getClass.getClassLoader().getResourceAsStream('자신의 정적파일 위치')를 통해 자신이 위치시킬 파일의 정보를 읽어올 수 있다.

 

    private InputStream getFileFromResourceAsStream(String fileName) {

        //현재 클래스에서 루트 경로를 얻어 해당 파일을 정보를 읽어온다.
        //만약에 파일 경로가 resources/config/test.properties 와 비슷한 형시이면
        //fileName = config/test.properties; 와 같은 형식이 될 것이다.
        ClassLoader classLoader = getClass().getClassLoader();
        InputStream inputStream = classLoader.getResourceAsStream(fileName);

        // the stream holding the file content
        if (inputStream == null) {
            throw new IllegalArgumentException("file not found! " + fileName);
        } else {
            return inputStream;
        }

    }

4. 출처 

 

https://mkyong.com/java/java-read-a-file-from-resources-folder/


메인 이미지 출처 : 사진: UnsplashNEOM