2012-07-31 5 views
44

java 명령을 사용하여 실행되면 런타임에이 클래스의 코드에서 실행 된 클래스의 현재 파일 시스템 위치를 확인할 방법이 있습니까?실행중인 클래스의 파일 시스템 경로를 얻는 중

다음 클래스의 예를 들면 다음과 같습니다

public class MyClass{ 
public static void main(String[] args){\ 
    new MyClass().doStuff(); 
} 

private void doStufF(){ 
    String path = ... // what to do here?! 
    System.out.println("Path of class being invoked: " + path); 
} 

} 

얻을 및 MyClass.class 파일의 파일 시스템에 올바른 경로를 인쇄 할 수있는 방법이 있나요 단지 호출되는?

마찬가지로, java -jar 명령에서 jar 파일을 호출하면 해당 jar 파일 내부의 클래스에서 jar 파일의 경로를 가져 오는 방법이 있습니까?

P.S. : java 명령이 호출 된 작업 디렉토리에 대한 어떠한 가정도하지 마십시오!

답변

68

다음 코드는이 작업을 수행합니다

final File f = new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath()); 

main 클래스와 MyClass 교체

f가 실행 된 .jar 파일을 나타내는 File 개체를 결과. 이 객체를 사용하여 부모에게 .jar이있는 디렉토리를 찾을 수 있습니다.

+5

주의 사항 : 클래스 파일이 공백이있는 디렉토리의 어딘가에 있으면 리턴 된 문자열 (getLocation()이 반환하고 URL 인코딩 된 URL 경로 부분에는 공백 대신 '% 20'이 포함됩니다! –

+1

@JandeVos'File (java.net.URI) '생성자를 사용하면이 문제를 해결하는 것으로 보입니다. – Spooky

+0

@ Spooky의 코멘트 : 그래서 최종 파일 f = new File (MyClass.class.getProtectionDomain(). getCodeSource(). getLocation(). getURI(). getPath()); –

관련 문제