2016-09-22 3 views
0

'\ src \ main \ resources \'패키지에 파일이 있습니다. 나는 'SRC \ 주 \ 자바 \ COM \ XXXX \ XXXX \ 서비스 \'. 나는 다음과 같은 코드를 실행,웹 응용 프로그램의 다른 패키지에서 파일 읽기

File USER_DIRECTORY = new File(System.getProperty("user.dir")); 
File DOCUMENT_DIRECTORY = new File(USER_DIRECTORY, "src/test/resources"); 
File template = new File(DOCUMENT_DIRECTORY, "input.docx"); 

나는 점점 오전 값에 위치한 된 .java 파일에서 해당 파일을 읽을 수 C : \ workspace \ apache-tomcat-7.0.70 \ bin '으로, DOCUMENT_DIRECTORY는'C : \ workspace \ apache-tomcat-7.0.70 \ bin \ src \ test \ resources '로 설정하십시오. 대상 파일이 해당 위치에 없습니다. 단위 테스트에서 동일한 코드를 실행하면 올바른 값을 얻게됩니다. 누군가 다른 패키지에서 파일을 읽는 방법을 알려줄 수 있습니까? 문제를 더 잘 이해하려면 추가 정보가 필요한지 알려주십시오.

+0

maven 또는 gradle과 같은 빌드 도구를 사용하고 있습니까? –

+0

조회 ['Class.getResource()'] (https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getResource (java.lang.String)) – qxz

+0

@ KarthikeyanVaithilingam 네, 저는 Maven을 사용하고 있습니다 – choom

답변

1

기본적으로 Maven/Gradle에서 src\main\resources에있는 리소스는 CLASSPATH에 있습니다. 교체 : 당신이 src\main\resourcesinput.docx라는 이름의 파일이있는 경우

File documentFile = new File(SomeClass.class.getResource("/input.docx").toURI()); 

을 다음과 같이 파일이 다음

File documentFile = new File(SomeClass.class.getResource("/documents/input.docx")); 

주 사용 sec\main\resources\documents 같은 하위 폴더에있는 경우

그래서 당신은 파일을 읽을 수 너의 클래스 이름을 가진 SomeClass.

+0

감사합니다. Karthikeyan Vaithilingam! 리소스 파일이 다른 모듈에 있습니다. 나는 documentFile에 대해 다음과 같은 가치를 얻고있다. '파일 :/C : /workspace/XXXXXProject/web/target/ROOT/WEB-INF/lib/docx-1.5.0-SNAPSHOT.jar! /input.docx'. 다음 오류 받기 'java.lang.IllegalArgumentException : URI가 계층 적 구조가 아닙니다' – choom

0

Maven에서는/src/test/*
에서 사용할 수있는 클래스를 패키지하지 않으므로 런타임에 이러한 파일을 사용할 수 없습니다. 사용할 수있게하려면 빌드 경로를 수정해야합니다 (하지만 질문을하는 이유는 무엇입니까?) 또는 아마도/src/main/resources에 있어야합니다.

이렇게하면 자동으로 만들어집니다 유효한. @ Karthikeyan Vaithilingam의 대답도 참조하십시오. 거기에서.

관련 문제