JAVA CLASSPATH 경로 가져오기 방법 상세 정보

3903 단어 javaclasspath경로
ClassLoader는 로드된 클래스 경로에서 리소스를 가져오는 두 가지 방법을 제공합니다.

  public URL getResource (String name); 
    public InputStream getResourceAsStream (String name); 
여기name는 자원의 클래스 경로입니다. "/"루트와 상대적인 위치입니다.getResource는 URL 대상을 얻어 자원을 포지셔닝합니다. getResourceAsStream은 이 자원의 입력 흐름을 가져오는 인용 보증 프로그램으로 정확한 위치에서 데이터를 추출할 수 있습니다.
그러나 진정으로 사용하는 것은 ClassLoader의 이 두 가지 방법이 아니라 Class의 get Resource와 get Resource As Stream 방법이다. 왜냐하면 Class 대상은 당신의 클래스(예를 들어 YourClass.class 또는 YourClass.get Class ())에서 얻을 수 있고, ClassLoader는 YourClass를 한 번 더 호출해야 하기 때문이다.getClassLoader () 방법이지만 JDK 문서에 따르면 Class 대상의 이 두 가지 방법은 사실 그것을 불러오는 ClassLoader에게 의뢰하는 것이기 때문에 Class 대상의 이 두 가지 방법만 사용하면 된다.
따라서,this를 직접 호출합니다.getClass().getResourceAsStream(String name) ;흐름 가져오기, 정적 방법에서는 ClassLoader를 사용합니다.getSystemResourceAsStream (String name) ; .
다음은classpath와 현재 클래스의 절대 경로를 얻는 방법입니다.필요한 자원의 절대적인 경로를 얻기 위해 그 중의 몇 가지 방법을 사용해야 할 수도 있다.
1.this.getClass().getResource("")
현재 클래스 class 파일의 URI 디렉터리를 받았습니다.자신을 포함하지 않는다!
예: file:/D:/workspace/jbpmtest3/bin/com/test/
2.this.getClass().getResource("/")
현재 classpath의 절대 URI 경로를 얻었습니다.
예: file:/D:/workspace/jbpmtest3/bin/
3.this.getClass() .getClassLoader().getResource("")
현재 ClassPath의 절대 URI 경로입니다.
예: file:/D:/workspace/jbpmtest3/bin/
4.ClassLoader.getSystemResource("")
현재 ClassPath의 절대 URI 경로입니다.
예: file:/D:/workspace/jbpmtest3/bin/
5.Thread.currentThread().getContextClassLoader ().getResource("")
현재 ClassPath의 절대 URI 경로입니다.
예: file:/D:/workspace/jbpmtest3/bin/
6.ServletActionContext.getServletContext().getRealPath(“/”)
웹 응용 프로그램에서 웹 응용 프로그램의 루트 디렉터리의 절대 경로를 얻습니다.이렇게 하면 우리는 웹 응용 프로그램의 루트 디렉터리에 대한 경로를 제공하기만 하면 포지셔닝 자원의 절대 경로를 구축할 수 있다.
예: file:/D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/WebProject
참고 사항:
1. 가급적 시스템 대비 사용을 자제한다.getProperty("user.dir")의 현재 사용자 디렉토리에 대한 상대 경로입니다.이것은 시한폭탄으로 언제든지 너의 목숨을 앗아갈 수 있다.
2. 가능한 한 URI 형식의 절대 경로 자원을 사용합니다.URI, URL, File 객체로 쉽게 변환할 수 있습니다.
3. 상대classpath의 상대적인 경로를 최대한 사용합니다.절대 경로를 사용하지 마십시오.위의 ClassLoader Util 클래스의public static URL getextend Resource(String relative Path) 방법을 사용하면 classpath의 상대적인 경로에 따라 모든 위치의 자원을 포지셔닝할 수 있습니다.
4. 절대 하드코딩의 절대 경로를 사용하지 마세요.ClassLoader 클래스의 getResource ("") 방법을 사용하여 현재classpath의 절대 경로를 얻을 수 있기 때문입니다.만약 당신이 반드시 절대적인 경로를 지정해야 한다면, 프로필을 사용하는 것도 하드코딩보다 훨씬 낫다.
CLASSPATH 외부 경로를 가져오는 방법:
URL base = this.getClass().getResource("");//먼저 본 클래스의 위치를 얻습니다. 예를 들어/home/popeye/testjava/build/classes/net/
      String path = new File(base.getFile(), "……/……/……/"+name).getCanonicalPath();///home/popeye/testjava/name
또한 ANT에서 프로그램을 시작하면this.getClass().getResource("")에서 추출한 것이 이상합니다. JAVA 명령줄로 직접 디버깅하면 됩니다.
다음은 자바에서 클래스 경로 classpath를 가져오는 방법
쓸데없는 말은 많이 하고 바로 여러분께 관건적인 코드를 붙여 드리겠습니다. 구체적인 코드는 다음과 같습니다.

<span style="font-size: 18px;">
System.out.println("++++++++++++++++++++++++");
String path = System.getProperty("java.class.path");
String path2 = FreeMarkerWriter.class.getProtectionDomain().getCodeSource().getLocation().getPath();
String path3 = FreeMarkerWriter.class.getProtectionDomain().getCodeSource().getLocation().getFile();
String path4 = Thread.currentThread().getContextClassLoader().getResource("").getPath();
System.out.println("path 1 = " + path);
System.out.println("path 2 = " + path2);
System.out.println("path 3 = " + path3);
System.out.println("path 4 = " + path4);
System.out.println("++++++++++++++++++++++++");
</span>
위에서 말한 것은 여러분께 소개해 드린 자바에서 클래스 경로classpath를 얻는 방법인 간단한 코드입니다. 여러분께 도움이 되었으면 합니다. 만약에 궁금한 점이 있으면 저에게 메시지를 남겨 주시면 제때에 답장해 드리겠습니다!

좋은 웹페이지 즐겨찾기