>  기사  >  Java  >  Java에서 getResourceAsStream 사용법 소개

Java에서 getResourceAsStream 사용법 소개

零下一度
零下一度원래의
2017-07-18 18:04:182927검색

JAVA를 사용하여 파일을 얻는 것은 간단해 보이지만 저와 같은 많은 초보자에게는 여전히 매우 얕고 사용 경험이 매우 심오합니다. 가장 일반적으로 사용되는 방법은 JAVA의 File 클래스를 사용하는 것입니다. c :/test.txt 파일을 사용하려면 File file = new File("c:/test.txt"); 이 사용의 문제점은 무엇입니까? JAVA의 경우 경로가 하드 코딩되어 있다는 것을 모두가 알고 있다고 생각합니다. 정신, 애플리케이션 한 번만 구성하면 어디에서나 사용할 수 있어야 하며 실제 애플리케이션 측면에서 최종 생성된 애플리케이션은 Windows 이외의 운영 체제에도 배포됩니다. Linux의 경우 애플리케이션에 c:/라는 단어를 사용하면 실패를 의미하므로 , 하드 코딩을 피해야 합니다. 즉, 절대 경로를 직접 사용해야 합니다.

 서블릿 애플리케이션에는 getRealPath(String str) 메서드가 있습니다. 이 메서드도 절대 경로를 직접 작성하지 않고도 파일의 경로를 동적으로 얻을 수 있지만 이 메서드도 권장되지 않습니다. 파일을 얻는 더 좋은 방법이 있나요?

Class.getResource() 및 Class.getResourceAsStream() 메서드가 있지만 많은 사람들이 아직 그 사용법을 이해하지 못합니다. 물론 어떤 사람들은 이미 그것을 능숙하게 사용해왔고, 이 사람들은 그것을 처리할 필요가 없습니다. 그렇지 않은 사람들을 위해 여기서는 조금 설명하겠습니다. 알고 있거나 별로 익숙하지 않습니다.

먼저 Java에는 다음과 같은 getResourceAsStream 유형이 있습니다:

 1. Class.getResourceAsStream(문자열 경로): 경로가 '/'로 시작하지 않는 경우 기본값은 리소스를 가져오는 패키지에서 가져오는 것입니다. 이 클래스는 '/'로 시작하는 경우

 ClassPath 루트에서 가져옵니다. path를 통해 절대 경로를 구성할 뿐이며, 궁극적으로 ClassLoader가 리소스를 얻습니다.

 2. Class.getClassLoader.getResourceAsStream(String path): 기본적으로 ClassPath 루트에서 가져옵니다. 경로는 '/'로 시작할 수 없습니다. 마지막으로 ClassLoader는 리소스를 가져옵니다.

  3. ServletContext.getResourceAsStream(String path): 기본적으로 Tomcat에서 경로가 '/'로 시작하는지 여부는 중요하지 않습니다. 컨테이너 구현.

  4. Jsp 아래의 애플리케이션 내장 객체는 위의 ServletContext를 구현한 것입니다.

그런데 JAVA에는 3개의 로더가 있습니다.

총 3개의 로더가 있습니다.

bootstrap 클래스 로더: JAVA 핵심 클래스(jre 아래의 lib 및 클래스 디렉터리에 있는 콘텐츠) 로드를 담당합니다.

확장 클래스 로더: JAVA 확장 클래스(jre 아래 lib/ext 디렉터리의 내용) 로드를 담당합니다.

시스템 클래스 로더: 애플리케이션에서 지정한 클래스(환경 변수 classpath에 구성된 콘텐츠)를 로드합니다.
시스템 클래스 로더의 로드 순서 클래스도 위의 순서에 따라 정렬됩니다. 이렇게 하면 시스템 클래스가 먼저 로드될 수 있습니다.

동시에 사용자는 특별한 리소스를 로드하기 위해 자신만의 ClassLoader를 정의할 수도 있습니다.

이것은 Class.getClassLoader()와 Thread.currentThread.getContextClassLoader()의 차이점과 관련이 있습니다.

간단한 예를 들어보겠습니다.

어느 날 JAVA가 컴퓨터의 표준 카메라를 시작하기 위해 StartCamera라는 클래스를 제공하고 이 클래스를 항아리에 패키징한다고 가정해 보겠습니다.

일반적인 상황에서 카메라를 시작하려면 이 jar를 클래스 경로에 구성하기만 하면 됩니다. 시스템 클래스로더는 시스템이 시작될 때 이 클래스를 애플리케이션에 로드합니다.

하지만 카메라 제조업체가 다르기 때문에 새 장치에 대해 다양한 StartCamera 구현이 있을 것입니다. 애플리케이션에서는 실제 사용자가 어떤 것을 사용할지 알 수 없습니다. 그래서 우리는 특정 장치 유형에 해당하는 StartCamera 클래스를 로드하도록 ClassLoader를 사용자 정의했습니다.

이런 식으로 나타납니다. 먼저 정의한 클래스를 로드한 다음 로드할 수 없는 경우 시스템 클래스를 로드합니다. 이러한 요구는 시스템의 기본

부모 위임 로딩 메커니즘

으로 충족될 수 없습니다. Thread.currentThread.getContextClassLoader()가 생성되는 방식입니다. Thread.currentThread.setContextClassLoader()를 사용하여 현재 스레드에 해당하는 ClassLoader를 지정한 다음 get 메서드를 사용하여 이를 얻습니다.

위 내용은 Java에서 getResourceAsStream 사용법 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.