[SPRING] Spring Boot - ResourceLoader를 사용하여 텍스트 파일 읽기
SPRINGSpring Boot - ResourceLoader를 사용하여 텍스트 파일 읽기
다음과 같이 스프링 리소스 로더를 사용하여 텍스트 파일을 읽으려고합니다.
Resource resource = resourceLoader.getResource("classpath:\\static\\Sample.txt");
이 파일은 스프링 부트 프로젝트에서 찾을 수 있습니다.
이클립스에서 응용 프로그램을 실행할 때 잘 작동하지만 응용 프로그램을 패키지화 한 다음 java -jar를 사용하여 실행하면 파일을 찾을 수 없습니다 예외 :
java.io.FileNotFoundException: class path resource [static/Sample.txt] cannot be resolved to absolute file path because it does not reside in the
file system: jar:file:/C:/workspace-test/XXX/target/XXX-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/static/Sample.txt
샘플이 위치하는 Jar 파일의 압축을 풉니 다. XXX-0.0.1-SNAPSHOT \ BOOT-INF \ classes \ static \ Sample.txt
누군가 나를 기쁘게 도와 줄 수 있습니까?
미리 감사드립니다!
해결법
-
==============================
1.나는 당신의 코드를 검사했다. Spring Boot JAR에서 classpath로부터 파일을로드하고 싶다면, resource.getFile () 대신 resource.getInputStream ()을 사용해야한다. resource.getFile ()을 사용하려고하면 ) Spring은 파일 시스템 경로에 접근을 시도하지만 JAR의 경로에 접근 할 수 없으므로 에러가 발생한다.
나는 당신의 코드를 검사했다. Spring Boot JAR에서 classpath로부터 파일을로드하고 싶다면, resource.getFile () 대신 resource.getInputStream ()을 사용해야한다. resource.getFile ()을 사용하려고하면 ) Spring은 파일 시스템 경로에 접근을 시도하지만 JAR의 경로에 접근 할 수 없으므로 에러가 발생한다.
세부 사항은 아래와 같습니다.
https://smarterco.de/java-load-file-classpath-spring-boot/
-
==============================
2.보십시오 resourceLoader.getResource ( "classpath : static / Sample.txt");
보십시오 resourceLoader.getResource ( "classpath : static / Sample.txt");
java -jar XXXX.jar로 실행할 때이 코드로 작업하기
------ 업데이트 ------
코드를 살펴본 후 문제는 FileInputStream에 의해 파일을 읽으려고하지만 실제로는 jar 파일 안에 있습니다.
하지만 사실 org.springframework.core.io.Resource를 얻으면 고양이가 InputStream을 얻는다. 그래서 새로운 BufferedReader (새로운 InputStreamReader (resource.getInputStream ()))처럼 할 수있다.) readLine ();
-
==============================
3.나는 같은 문제를 가지고 있었고 @Gipple Lake는 스프링 부트로 inputStream으로 파일을로드해야한다고 설명했다. 그래서 아래 코드를 예제로 추가하겠습니다. 여기서 import.xml 파일을 읽고 싶습니다.
나는 같은 문제를 가지고 있었고 @Gipple Lake는 스프링 부트로 inputStream으로 파일을로드해야한다고 설명했다. 그래서 아래 코드를 예제로 추가하겠습니다. 여기서 import.xml 파일을 읽고 싶습니다.
public void init() { Resource resource = new ClassPathResource("imports/imports.xml"); try { InputStream dbAsStream = resource.getInputStream(); try { document = readXml(dbAsStream); } catch (SAXException e) { trace.error(e.getMessage(), e); e.printStackTrace(); } catch (ParserConfigurationException e) { trace.error(e.getMessage(), e); e.printStackTrace(); } } catch (IOException e) { trace.error(e.getMessage(), e); e.printStackTrace(); } initListeImports(); initNewImports(); } public static Document readXml(InputStream is) throws SAXException, IOException, ParserConfigurationException { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setValidating(false); dbf.setIgnoringComments(false); dbf.setIgnoringElementContentWhitespace(true); dbf.setNamespaceAware(true); DocumentBuilder db = null; db = dbf.newDocumentBuilder(); return db.parse(is); }
나는 "imports.xml"을 추가했다. src / main / ressources / imports
-
==============================
4.파일을 resources / static 아래에두면 classpath에 있고 아래처럼 경로를 읽습니다.
파일을 resources / static 아래에두면 classpath에 있고 아래처럼 경로를 읽습니다.
import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; Resource resource = new ClassPathResource("/static/pathtosomefile.txt"); resource.getURL().getPath()
from https://stackoverflow.com/questions/41754712/spring-boot-reading-text-file-using-resourceloader by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 서버 측에서 스프링 프레임 워크로 안드로이드에 Stomp 클라이언트 설정 (0) | 2019.01.15 |
---|---|
[SPRING] @JsonView와 Spring MVC 사용하기 (0) | 2019.01.15 |
[SPRING] Spring welcome-file-list 올바른 매핑 (0) | 2019.01.15 |
[SPRING] Spring 3.1 + Hibernate 4.1 JPA, 엔티티 관리자 팩토리가 두 번 등록 됨 (0) | 2019.01.15 |
[SPRING] 스프링 4에서 @PathVariable 검증 (0) | 2019.01.15 |