728x90
src/main/resource/ 디렉토리 하위에 "path/data.json" 경로의 파일을 넣어두고 아래와 같이 getFile() 을 사용하면 local 환경(inteliJ 같은 개발툴)에서 실행할때는 아무 문제가 없다. (실제 파일 경로가 있으니..)
File file = new ClassPathResource("path/data.json").getFile();
그런데, jar 로 빌드 패키지를 만들어서 배포해서 java -jar 로 실행하면 "java.io.FileNotFoundException" 이 나오면서 프로그램이 종료한다.
2023-11-16 00:11:12.096 [main] ERROR [http://com.test.app.component.ReadComponet.init:38] - Failed to read file java.io.FileNotFoundException: class path resource [path/data.json] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/C:/app/app.jar!/BOOT-INF/classes!/path/data.json at org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:217) at org.springframework.core.io.AbstractFileResolvingResource.getFile(AbstractFileResolvingResource.java:162) |
jar 파일을 풀고 나서 실행하는게 아니다 보니, 실제 경로에 해당 파일이 없어서 인데 방법은 getFile() 말고 ClassPathResource("/path/data.json").getInputStream() 으로 InputStream 으로 받아서 처리를 해야한다.
참고한 코드는 아래와 같다. 그리고 resource path 도 "path/data.json" 이 아니라 "/path/data.json" , 즉 "/" 로 시작해야 한다.
String filePath = "/path/data.json";
try (InputStream inputStream = getClass().getResourceAsStream(filePath); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {
return reader.lines().collect(Collectors.joining(System.lineSeparator()));
}
참고
https://www.baeldung.com/spring-classpath-file-access
'Engineering > Java' 카테고리의 다른 글
Files.lines(path) 는 잘 알고 사용하자. (0) | 2024.07.11 |
---|---|
Column cannot be null 오류 해결 (1) | 2024.01.04 |
javac: invalid target release: 11 문제 해결 (0) | 2023.07.19 |
java 11 설치 on Rocky Linux 8.6 (0) | 2023.05.10 |
maven 에 if condition 추가 (0) | 2020.12.22 |