2013-06-27 2 views
42

표준 maven 설정을 사용한다고 가정합니다.프로젝트의/resources 폴더에있는 파일의 절대 경로를 얻는 방법

리소스 폴더에 abc 파일이 있다고 가정 해보십시오.

Java에서 파일의 절대 경로를 어떻게 얻을 수 있습니까?

+0

Maven 플러그인을 작성 하시겠습니까? 또는 프로그램 실행시 파일에 액세스 하시겠습니까? –

+0

관련 : http://stackoverflow.com/questions/8136891/getting-absolute-path-of-a-file-loaded-via-classpath – Vadzim

답변

14

당신은 File 개체를 만들고 getAbsolutePath 방법을 사용할 수 있습니다

File file = new File("resources/abc.txt"); 
String absolutePath = file.getAbsolutePath(); 
+5

제한된 사용에 대한 조언. 작업 디렉토리가 메이븐이어야합니다. 뿌리. 그리고 나서, 파일을 참조하기 위해 Maven이 처리 한 후에 리소스 파일을 저장하는 정식 장소이기 때문에'target/classes/abc.txt'를 사용해야합니다 (예 : maven-resources 플러그인이 abc.txt). 클래스 경로에서 getResource()를 통해 abc.txt를 사용하는 것이 훨씬 좋습니다. –

+1

최종 사용자가 응용 프로그램을 실행 가능한 JAR로 실행하는 경우 어떻게해야합니까? 그러면 실제 파일이 전혀 없을 것입니다. 이것이 getResource()를 사용해야하는 또 다른 이유입니다. 무엇을하고 싶은지에 따라 입력 스트림을여십시오. –

+4

정답으로 제거 할 수 있습니까? @ 카롤 S 아래 답변 - 그 정답 (따라서 upvote 불일치) – DanGordon

104

실제로 작동하는 적절한 방법 :

URL resource = YourClass.class.getResource("abc"); 
Paths.get(resource.toURI()).toFile(); 

그것은 문제가 이제 클래스 경로에 파일이 물리적으로하지 않는 경우를 자원이 실제로 파일이고 JAR 항목이 아닌 한 발견됩니다. 당신은 경로이며 특별한해야한다

(겉으로 분명 new File(resource.getPath())가! 모든 경로가 작동하지 않습니다 경로는 여전히 URL 인코딩입니다!)

+3

아니면 그냥 할 수 있습니다 :'new File (resource.toURI()). getAbsolutePath();'(즉, Path 객체가 필요 없다고 생각합니다.) –

+1

toURI()를 사용하면 경로에서 % 20으로 나오는 공백을 피할 수 있습니다! –

+17

감사! 이것은 나를 위해 거의 효과가있었습니다. 하지만 한 가지 변경을해야했습니다 : YourClass.class.getClassLoader(). getResource ("abc"); – yngwietiger

11

은의 클래스 로더 인스턴스를 작성 /

URL resource = YourClass.class.getResource("/abc"); 
Paths.get(resource.toURI()).toFile(); 
5

에서 시작 클래스를 사용하면 파일이나 리소스에 쉽게 액세스 할 수 있습니다. 이제 해당 클래스의 getPath() 메소드를 사용하여 경로에 액세스합니다.

ClassLoader classLoader = getClass().getClassLoader(); 
String path = classLoader.getResource("chromedriver.exe").getPath(); 
System.out.println(path); 
관련 문제