2009-05-09 2 views
5

이는 자바 클래스 패스에 상대 디렉토리 (즉, foo는/바/plugh) 추가하고 사용할 수 있습니다자바 클래스 패스에 상대적으로 디렉토리를 추가하고 클래스 로더()를 사용. 같이 getResourceAsStream을 ("")

InputStream in = getClassLoader().getResourceAsStream("xyzzy.properties"); 

foo/bar/plugh/xyzzy.properties를 가져 오려면?

foo.jar;foo/bar/plugh;xyz.jar 

내가 아니라 plugh 디렉토리에서 모두 foo에와 XYZ 항아리에서 클래스 및 자원을 사용할 수 있어요 :

내 클래스 경로는 다음과 같습니다. 이 경우 in은 항상 null입니다.

이 기능을 사용할 수 없으며이 기능이 지원되지 않는 경우 확실하지 않습니다. 뭔가 이상하지 않거나 잘못 처리하고 있습니다. 절대 경로를 사용해야합니까?

+0

어떻게이 클래스 경로를 설정 했습니까? 다음 예와 같이? java -classpath foo.jar; foo/bar/plugh; xyz.jar –

답변

6

어쩌면 내가 뭘 하려는지 오해하고있다.하지만 클래스 패스에 폴더가 있다면, 그 아래에있는 모든 파일이 클래스 경로에 있어야한다는 것을 의미한다. 그렇지 않은 경우 클래스 경로에서 항상 각 .properties 파일을 전달할 수 있습니다.

그러나 파일이 들어있는 파일/폴더가 클래스 경로에 있기 때문에 어느 쪽이든, 당신은 할 수 있어야 :

InputStream in = new FileInputStream("classpath:xyz.properties") 

그리고 이후

는 "foo는/바/plugh의"클래스 경로에 , xyz.properties를 찾을 곳 중 하나가 "foo/bar/plugh"에 있습니다.

+0

내 응용 프로그램이 codehaus maven appassmebler가 빌드 한 배치 파일을 통해 실행될 때 어떤 이유로 이것이 작동하지 않습니다. 절대 경로는 작동하지만 상대 경로는 작동하지 않습니다. – sal

+2

내가 생각할 수있는 유일한 것은 클래스 경로에있는 상대 경로가 프로그램이 실행되는 위치를 기준으로 해결되는 것입니다. 예를 들어, C : \ myapp \ bin 디렉토리에 배치 파일이있는 경우 "기본"경로는 C : \ myapp가 아닌 C : \ myapp \ bin 일 수 있습니다. 이 경우 "C : \ myapp \ bin \ foo \ bar \ plugh \ xyz.properties"를 확인하려고 시도 할 것입니다. –

+0

디렉토리의 절대 경로로 나를 위해 일했습니다. 그러나 코드를 사용하여 이전에 시도했기 때문에 매우 이상합니다. InputStream in = getClassLoader().getResourceAsStream("xyzzy.properties"); 이 두 가지 방법의 차이점은 무엇입니까? 감사합니다. . –

관련 문제