English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

JAVA에서 CLASSPATH 경로를 얻는 방법 설명

ClassLoader는 로드된 클래스 경로에서 자원을 얻기 위해 두 메서드를 제공합니다:

  public URL getResource(String name); 
    public InputStream getResourceAsStream(String name); 

       여기서 name은 자원의 클래스 경로이며, "/”루트 경로 아래의 위치. getResource는 자원을 정위치로 지정하는 URL 객체를 얻습니다. getResourceAsStream은 해당 자원의 입력 스트림 참조를 얻어 프로그램이 올바른 위치에서 데이터를 추출할 수 있도록 합니다.

       하지만 실제로 사용하는 것은 ClassLoader의 이 두 메서드가 아니라 Class의 getResource와 getResourceAsStream 메서드입니다. 왜냐하면 Class 객체는 자신의 클래스에서 얻을 수 있습니다(예: YourClass.class 또는 YourClass.getClass()), ClassLoader는 또 다른 YourClass.getClassLoader() 메서드를 호출해야 합니다. 그러나 JDK 문서에 따르면 Class 객체의 이 두 메서드는 실제로는ClassLoader에 의해 '위임'(delegate)된다고 합니다. 따라서 Class 객체의 이 두 메서드만 사용하면 됩니다.

       따라서, 스트림을 얻기 위해 직접 this.getClass().getResourceAsStream(String name); 호출하고, 정적 메서드에서는 ClassLoader.getSystemResourceAsStream(String name);을 사용합니다.

      classpath와 현재 클래스의 절대 경로를 얻는 몇 가지 방법이 있습니다. 필요한 자원의 절대 경로를 얻기 위해 이 방법 중 일부를 사용할 수 있습니다.

1.this.getClass().getResource("")

현재 클래스 파일의 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(“/)

Web 애플리케이션에서, Web 애플리케이션의 루트 디렉토리의 절대 경로를 얻습니다. 이렇게 하면, Web 애플리케이션 루트 디렉토리에 대한 상대 경로만 제공하면 자원의 절대 경로를 구축할 수 있습니다.

예를 들어: file:/D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/WebProject

주의사항:

1.절대로 System.getProperty("user.dir")에 대한 상대 경로를 사용하지 마세요. 이는 타이머폭발과 같으며 언제든지 당신을 죽일 수 있습니다.

2.절대로 URI 형식의 절대 경로 자원을 사용하세요. 이는 쉽게 URI, URL, File 객체로 변환될 수 있습니다.

3.절대로 CLASSPATH에 대한 상대 경로를 사용하세요. 절대 경로를 사용하지 마세요.ClassLoaderUtil 클래스의 public static URL getExtendResource(String relativePath) 메서드를 사용하여 CLASSPATH에 대한 상대 경로로 모든 자원을 위치를 찾을 수 있습니다.

4.절대로 고정된 절대 경로를 사용하지 마세요. 왜냐하면, Loader 클래스의 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/

그런 다음, 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("
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>

위에 언급된 것은 편집자가 여러분에게 소개한 Java에서 클래스 경로 classpath를 얻는 방법의 간단한 코드입니다. 여러분이 어떤 질문이나 의문이 있으면, 편집자에게 댓글을 남겨 주시면, 편집자는 즉시 여러분에게 답변을 드릴 것입니다!

언급: 이 문서의 내용은 인터넷에서 수집되었으며, 저작권자는 모두 소유합니다. 내용은 인터넷 사용자가 자발적으로 기여하고 업로드한 것이며, 이 사이트는 소유권을 가지지 않으며, 인공 편집 처리를 하지 않았으며, 관련 법적 책임도 부담하지 않습니다. 저작권 침해가 의심되는 내용이 있으면, 이메일을 notice#w로 보내 주시기 바랍니다.3codebox.com에 이메일을 보내서 신고해 주시면, #을 @으로 바꾸어 주시고 관련 증거를 제공해 주시면, 사실이 확인되면 이 사이트는 즉시 저작권 침해 내용을 삭제할 것입니다.

추천해요