파일을 입력 스트림으로 로드: 다양한 접근 방식 및 사용 시기
파일을 입력 스트림으로 로드할 때 다음과 같은 몇 가지 방법이 있습니다. 각각 고유한 뉘앙스를 가지고 사용될 수 있습니다. 이 문서에서는 일반적으로 사용되는 세 가지 접근 방식의 차이점을 자세히 설명합니다.
Class.getResourceAsStream(fileName):
이 메서드는 fileName을 다음과 같이 해석합니다. 호출하는 클래스의 패키지에 대한 상대 경로입니다. 예를 들어, String.class.getResourceAsStream("myfile.txt")은 "java/lang/myfile.txt"의 클래스 경로 내에서 "myfile.txt" 파일을 검색합니다. 경로가 "/"로 시작하는 경우 절대 경로를 의미하며 클래스 경로 루트부터 검색을 시작합니다.
ClassLoader.getResourceAsStream(fileName):
Class.getResourceAsStream()과 달리 이 메서드는 모든 경로를 절대 경로로 처리합니다. String.class.getClassLoader().getResourceAsStream("myfile.txt") 및 String.class.getClassLoader().getResourceAsStream("/myfile.txt") 모두 다음 클래스 경로에서 "myfile.txt" 파일을 검색합니다. "./myfile.txt."
Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName):
이 메서드는 애플리케이션 서버에서 클래스와 파일을 로드할 때 적합합니다. 이는 현재 스레드와 연관된 컨텍스트 클래스로더를 사용하기 때문입니다. server.
각 방법을 사용하는 경우:
파일과 클래스가 동일한 jar 및 EAR 파일에 있는 특정 시나리오에서 WebSphere 6.1에 배포된 경우 Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName)을 사용해야 합니다. 왜냐하면 컨텍스트를 고려하기 때문입니다.
Tomcat 7 이하 사용자에 대한 경고:
그러나 Tomcat 7 이하를 사용하는 경우 다음 주의 사항에 유의하세요. 위의 설명은 일반적으로 타당하지만 Tomcat 버전 6과 7에서는 findResource(String name) 메서드에서 리소스 정규화를 다르게 처리하는 것 같습니다. 결과적으로 classLoader.getResourceAsStream("/resource.txt") 및 classLoader.getResourceAsStream("resource.txt")은 이러한 버전에서 동일한 결과를 산출하지 못할 수 있습니다. 이전 Tomcat 버전에서 이러한 방법을 사용하는 경우 주의하세요.
위 내용은 Java에서 파일을 입력 스트림으로 로드하기 위한 올바른 방법을 선택하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!