2009-11-25 3 views
1

나는 하나의 텍스트 파일을 기반으로하는 프로그램을 작성했다 : 나는 파일을 읽고 정보를 저장 한 다음 정보를 검색한다. 그래서 프로그램이 작동하려면, 그 파일은 프로그램에 존재하고 탐지 가능해야합니다. 나는 이클립스를 사용하므로 파일을 기본 리소스 맵 (src/main/resources)에 둔다. 내 프로그램의 시작에서 나는 파일을 만듭니다이클립스와 JAR의 리소스 위치 차이와 관련된 문제

private static File textFile = new File("src/main/resources/TEXT.TXT") 
그러나

, 내 프로그램은 메이븐을 사용하여 포장 할 때, 나는 모든 클래스와 자원 파일이 같은 폴더에 존재하는 JAR을 얻을; 내 프로그램이 더 이상 파일을 찾을 수 없기 때문에 작동을 멈춘다.

이 문제를 해결하는 방법에 대한 도움이 필요하십니까? 내 프로그램이 이클립스와 JAR에서 작동하는 상황을 선호하지만, JAR만으로도 괜찮을 것입니다.

답변

3

ClassLoader.getResourceAsStream을 사용하여 클래스 경로 (또는 getResource)에서로드하여 파일 URL을 가져올 수 있습니다.

Thread.currentThread().getContextClassLoader().getResource("TEXT.TXT") 

이 이클립스에서 클래스 패스에 SRC/메인/자원으로 오래 사용할 수 있습니다. (Maven Eclipse 플러그인은 기본적으로이 플러그인을 포함합니다.) 파일은 Eclipse 외부에서 작동하려면 jar 파일에 있어야합니다.

+0

또는 getClass(). getClassLoader(). getResource ("TEXT.TST")는 코드에서 비롯된 클래스 로더를 항상 가져올 수 있으므로 일부 환경에서는 안전합니다. –

0

멋진 제안은 이클립스 자체에서 완벽하게 작동합니다. 파일의 올바른 위치가 반환되고 내가 원하는대로 파일을 사용할 수 있습니다. 프로그램을 jar로 열면 여전히 문제가 있습니다.

/something/something/something/something/workspace/program/target/program-0.0.1.jar!/TEXT.TXT 다음의 getResource 방법은 바로 하나처럼 보이는 위치를 반환합니다.

그러나, 나는 문자열이 URL을 변환 할 때, 파일 객체를 생성하는 문자열을 사용하고 내 프로그램이 파일 객체를 사용하여, 나는 다음과 같은 오류 얻을 :

java.io.FileNotFoundException를 : 파일 :! /something/something/something/something/workspace/program/target/program-0.0.1.jar /TEXT.TXT (해당 파일 또는 디렉토리)

그래서,의 getResource 방법은 파일을 찾을 않습니다 하지만 프로그램이 어떻게 든 그것을 사용할 수는 없습니다 ..