[SpringBoot] Windows 와 Linux 환경 에서 파일 읽 기 방식 이 호 환 되 지 않 습 니 다.

문 제 를 약술 하 다.
며칠 전 클 라 우 드 컴 퓨 팅 작업 백 엔 드 부분 은 SpringBoot 로 만 들 었 습 니 다. resources 디 렉 터 리 에 있 는 제 이 슨 파일 을 읽 어야 합 니 다.결국 이 컴퓨터 에서 잘 달 리 는 프로그램 은 jar 패키지 로 서버 에 업로드 한 후 파일 을 찾 을 수 없 는 오 류 를 보고 했다.
이 컴퓨터 환경: Windows 10
서버 환경: CentOS 7
문제 분석
우선 리 소스 디 렉 터 리 의 파일 을 자주 읽 는 방법 을 살 펴 보 자.
1. 일반적인 파일 읽 기 방법
× IDE 에서 만 실행 할 수 있 습 니 다. jar 패키지 로 연결 한 후 실행 하면 오류 가 발생 합 니 다.
File file = new File("src/main/resources/static/graphx.json");

2. ResourceUtil
× Linux 시스템 에서 사용 할 수 없습니다.
File file = ResourceUtils.getFile("classpath:static/graphx.json");

3. ClassPathResource
√ 통용 방법, Linux 와 Windows 에서 모두 정상적으로 읽 을 수 있 습 니 다.
InputStream is = new ClassPathResource("\\static\\graphx.json").getInputStream();

문제 탐구
다른 블 로 그 를 참고 하여 다음 과 같은 결론 을 얻 었 다.
1. SpringBoot 가 jar 패키지 로 연결 되면 압축 파일 을 직접 가 져 올 수 없고 스 트림 으로 만 파일 내용 을 가 져 올 수 있 습 니 다.
2. 클래스 로 더 는 jar 패키지 의 컴 파일 된 class 파일 을 읽 을 수 있 기 때문에 jar 패키지 의 파일 흐름 을 직접 읽 을 수 있 습 니 다. 이것 이 세 번 째 방법 으로 통용 되 는 효과 적 인 원인 입 니 다.
마찬가지 로 같은 원 리 를 사용 하 는 방법 보다 통용 되 고 효과 가 있다.
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("/static/graphx.json");
InputStream is = this.getClass().getResourceAsStream("/static/graphx.json");

참고: SpringBoot 에서 리 소스 파일 을 읽 는 몇 가지 방법

좋은 웹페이지 즐겨찾기