2012-02-15 5 views
2

jar에서 응용 프로그램을 실행할 때 new File(path)이 작동하지 않는 이유는 무엇입니까? 어떻게해야합니까? 이제 응용 프로그램이 파일을로드하려고 할 때 FileNotFound 예외가 발생합니다. 이 클래스 패스에 이미있는 경우jar에서 응용 프로그램을 실행할 때 새 파일 (경로)이 작동하지 않는 이유는 무엇입니까?

final File file = new File("src/main/resources/maps/ParcelsCountyRDMFinal5.shp"); 
+0

경로를 어떻게 제공합니까? 그것은 상대적입니까? 등 –

+0

그것은 일식에서 잘 작동하지만 내가 예외를 제기 cmd에서 자바 - 항아리를 실행할 때. – ilija

+0

main 메서드에서 해당 파일을 만듭니다. 나는 Maven 그늘 플러그인을 사용했다. 내 항아리를 풀면 map 폴더는 파일을 만드는 클래스가 들어있는 패키지의 폴더 옆에 있습니다. 나는 새 File (object.getClass(). getResources ("maps/ParcelsCountyRDMFinal5.shp"). getPath())을 시도했지만 null 포인터 예외가 발생했습니다. – ilija

답변

2

가, 메이븐을 사용하는 말, 자원 파일은 클래스 파일 옆에 간다. 이클립스를 실행할 때

final File file = new File(getClass().getResource("/maps/ParcelsCountyRDMFinal5.shp")); 
1

이 같은 그것을 얻을 수 있습니다 : 항아리가 제대로 만든 경우

File file = new File(getClass().getResource("Relative_Path_From_This_Class_To_YourFileName").getPath()); 
1

을 제안

final File file = new File("../../maps/ParcelsCountyRDMFinal5.shp"); 

또는 :

myapp.jar 
| 
+--- com 
|  +---mycompany 
|   +-- FileOpsClass 
| 
+--- maps 
     +-- fileToRead 

위의 구조에 대해 다음과 같이 디렉토리 및 액세스 fileToRead에 걸어 수 있습니다 : 그것은 다음과 같이 보입니다 현재 작업 디렉토리가 프로젝트 디렉토리로 설정됩니다. 따라서 상대 경로가 작동합니다. 파일이 항아리로 압축되기 때문에 파일 대신 InputStream을 사용하는 것이 좋습니다.

InputStream in = this.getClass().getResourceAsStream("/resources/maps/ParcelsCountyRDMFinal5.shp"); 
관련 문제