2010-07-29 5 views
2

와 나는 (어떤 객체 지금 나에서 초기화되지 않은 정적 맥락에서) 다음 코드를 사용하여 여기읽기 자료가 제대로 이클립스 자바

<project>/resource/text/translation_en.properties 

하는 특성 파일을로드하려고 :

<This_Classes_name>.class.getResourceAsStream("/resource/text/translation_en.properties"); 

왜 이렇게로드합니까? getResourceAsStream()이 정적이 아니기 때문에 먼저 Object 클래스를 사용합니다.이 메소드를 사용하여 속성 파일을로드해야한다는 검색 결과를 알게되었습니다. 그렇다면 자바가 내 Main.java가 아니라 프로젝트를 기준으로 보입니다. 그러나, 나는 그것을 사용하여 여전히 null이된다.

정확한 위치에 파일이 있으면 어떻게 작동하지 않습니까? Java는 여기서 무엇을합니까? 이

내가하는 방법이 예제에서, 어떤 경로없이 인수로 파일 이름을 소요 생각 (클래스 경로에 JAR 파일에 파일 포함) 전체 클래스 경로에서 파일을 읽을 수 있기 때문에

답변

2

리소스가 클래스 경로에 있어야합니다. 하나의 옵션은 소스 폴더 전체/리소스 폴더를 복사하는 것입니다. 또 다른 옵션은 리소스 만 포함하는 새 소스 폴더를 만들고 거기에/resource 폴더를 이동하는 것입니다. getResourceAsStream("/text/translation_en.properties");

1

같이 getResourceAsStream가 사용됩니다 클래스 로더는 첫 부분을 경로로 해석하지 않고 "/resource/text/translation_en.properties"라는 파일을 찾습니다. 이 같은 시도 로딩 :

this.getClass().getClassLoader().getResourceAsStream("translation_en.properties"); 

은 또한 알면 파일이 클래스 경로에 실제로 있는지 확인해야합니다. Maven과 Eclipse에는 생성 된 클래스가 모두 들어있는 폴더 "target"이 있어야합니다. 이 폴더는 프로젝트가 Eclipse에서 실행될 때 클래스 경로에 추가됩니다.

도움이 되셨습니다 ....

+0

작은 오타가없는 한/resource 폴더를 소스 폴더로 만들지 마십시오 :'this.getClass' ->'this.getClass()' – wlk

+0

@Wojtek : thx를 고정 시켰습니다. – fasseg

관련 문제