2010-06-23 3 views
30

, 나는 main 메소드에 다음 코드를 :Maven 프로젝트의 리소스 파일 경로는 무엇입니까? 내 Maven 프로젝트에서

FileInputStream in = new FileInputStream("database.properties"); 

하지만 항상 오류를 발견하지 않는 파일을 가져.

나는 src/main/resources에 파일을 넣었고 target/classes 디렉토리에 제대로 복사되었다. (Maven 리소스의 예상되는 동작이라고 생각한다.) 실제로 프로그램을 실행할 때 절대 찾을 수없는 것 같다. 파일. 나는 다른 여러 경로를 시도했다 :

FileInputStream in = new FileInputStream("./database.properties"); 
FileInputStream in = new FileInputStream("resources/database.properties"); 

등 그러나 아무것도 작동하지 않는 것 같습니다.

그래서 적절한 경로는 무엇입니까? 을 바탕으로


"부인의"여기 아래에 대답하는 것은 내가 필요로 무엇을했다 :

TestDB 클래스의 이름입니다
InputStream in = TestDB.class.getResourceAsStream("/database.properties") 

.

도움 주셔서 감사합니다.

답변

51

파일을 직접로드 할 수 없으므로 자원 추상화를 사용해야합니다 (자원은 파일 시스템에있을 수는 없지만 클래스 경로의 모든 위치 - jar 파일 또는 기타). 이 추상화는 리소스를로드 할 때 사용해야하는 것입니다. 리소스 경로는 클래스 파일의 위치와 관련이 있으므로 '루트'로 이동하려면 슬래시를 앞에 붙여야합니다.

InputStream in = getClass().getResourceAsStream("/database.properties"); 
+0

정적 메서드에서 파일에 액세스하려는 경우 getClass 작동하지 않습니다. 이 경우 대안이 있습니까? – acarlow

+4

클래스 이름을 사용하십시오 (예 : Main.class.getResourceAsStream()). 모든 클래스 또는 클래스 로더를 사용할 수 있으므로 hread.getContextClassLoader(). getResourceAsStream()도 작동합니다. –

관련 문제