2016-08-01 2 views
2

내 jar 파일에 추가하려는 외부 파일이 몇 개 있으며 클래스 내의 파일에 액세스합니다. java -jar 명령을 사용하여 명령 줄에서이 jar 파일을 실행 중입니다. 따라서 절대 경로를 사용하면 파일 내용에 액세스 할 수 있지만 상대 경로를 사용하면 java.io.IOException: (No such file or directory)이됩니다. 두 파일을 모두 src/main/resorces 디렉토리에 포함 시켰습니다. 나는 file.conf, /file.conf, ./file.conf을 사용해 보았지만 그 중 아무 것도 작동하지 않았습니다. 또한 build.gradle에 파일을 포함 시키려고 시도했습니다
from{ ["file1.conf","file2.conf"] }.그라디언트를 사용하여 jar에 외부 설정 파일 추가

어떻게하면 파일의 상대 경로를 사용하여 내 Java 코드에서 파일 내용에 액세스 할 수 있습니까?

답변

0

정확하게 이해했다면 classpath에있는 파일에 액세스하려고합니다. 이러한 파일은 응용 프로그램과 함께 패키지되며 이름으로 알 수 있습니다. 이것이 바로, 당신은 특히 파일의 내용을 수용 할 수있는 java.io.File하지만 방법이 필요하지 않은 경우, 나는이 제안 : 당신이 원하는 경우

try (InputStream is = MyClass.class.getResourceAsStream("/file.conf")) { 
    // do something with the input stream 
} 

당신은 또한 파일의 java.net.URL를 검색 할 수 있습니다.

간단히, 문자열 속성에 대한 구문은 다음과 같습니다 속성이 /로 시작

  • 경우, 이름이 클래스 패스의 루트에서 해결됩니다. 예를 들어, java -jar hello.jar을 실행하는 경우 file.conf는 hello.jar의 루트에 있어야합니다.
  • 속성이 /으로 시작하지 않으면 이름은 getResourceAsStream() 메서드를 호출 한 클래스와 비교하여 해결됩니다.

자세한 내용은 Class API을 확인하십시오.

+0

URL url = ClassLoader.getSystemClassLoader(). getResource ("file.conf");와 url.getPath()를 시도했지만 작동하지 않았습니다. 나는 여전히'(그런 파일이나 디렉토리가 없다 '). 항아리 뿌리에서 내 파일을 볼 수 있습니다. 이클립스에서는 잘 돌아 가지 만'java -jar' 커맨드에서는 그렇지 않다. –

+0

'URL url = MyClass.class.getResource ("/ file.conf");' –

+0

속성 파일을 만들었고 제대로 작동 했습니까? 그러나 .conf 파일에서는 작동하지 않습니다. 그래서'url.getPath()'에 의해 file.conf의 경로를 출력했습니다. '/Users/user/Desktop/workspace/project/build/libs/myProject-all-1.0.jar!/file.conf'와 같은 것을 보여줍니다. 그게! 항아리 후? 하지만 이클립스에서 그 경로를 출력하면 파일의 올바른 경로 즉'../../ Desktop/workspace/myProject/bin/file.conf'가 출력됩니다 –

관련 문제