[SpringBoot] Windows 와 Linux 환경 에서 파일 읽 기 방식 이 호 환 되 지 않 습 니 다.
1465 단어 학 프로젝트SpringBootLinux파일 읽 기
며칠 전 클 라 우 드 컴 퓨 팅 작업 백 엔 드 부분 은 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 에서 리 소스 파일 을 읽 는 몇 가지 방법
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Thymeleaf 행 단위로 데이터 게시뷰측 포인트 해설 비고 input type="hidden" 브라우저에는 표시되지 않지만 컨트롤러에 값을 전달할 수 있습니다. name="id"th:value="*{id}" name으로 지정한 값과 Entity 클래스...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.