>  기사  >  Java  >  명령줄에서 실행할 때 getClass().getResource()가 실패하는 이유는 무엇입니까?

명령줄에서 실행할 때 getClass().getResource()가 실패하는 이유는 무엇입니까?

DDD
DDD원래의
2024-11-07 00:50:03684검색

Why Does getClass().getResource() Fail When Running from the Command Line?

getClass().getResource()에 의한 파일 로드

getClass().getResource() 메소드를 사용하여 리소스 파일을 로드할 수 있습니다. . Eclipse와 같은 개발 환경에서 배포할 때 이 방법은 일반적으로 원활하게 작동합니다. 그러나 명령줄에서 애플리케이션을 실행하면 널 포인터 예외가 발생할 수 있습니다.

이 문제는 getClass().getResource()가 클래스 로더를 활용하여 리소스를 검색하기 때문에 발생합니다. 액세스 가능하려면 리소스가 클래스 경로에 포함되어야 합니다. Eclipse를 사용하는 경우 소스 폴더와 리소스 파일을 포함한 모든 구성 요소는 기본적으로 클래스 경로에 배치됩니다. 따라서 클래스와 동일한 패키지나 디렉터리에서 리소스를 로드할 수 있습니다.

반대로 명령줄에서 실행하는 경우 클래스 경로가 자동으로 구성되지 않습니다. 리소스가 포함된 파일이나 디렉터리는 클래스 경로에 명시적으로 추가되어야 합니다. 이를 수행하는 한 가지 방법은 CLASSPATH 환경 변수를 파일이나 디렉터리의 경로로 설정하는 것입니다.

코드에 표시된 대로 FileInputStream을 직접 사용하여 리소스를 로드하는 것은 권장되지 않는다는 점에 유의하는 것이 중요합니다. 대신, getResourceAsStream()을 사용하여 InputStream을 얻으십시오. 이는 JAR 파일로 배포하거나 네트워크를 통해 클래스를 로드할 때 호환성을 보장합니다.

또한 getResource() 메서드를 사용하면 클래스 패키지를 기준으로 리소스의 위치를 ​​지정할 수 있습니다. 예:

Foo.class.getResourceAsStream("Test.properties")

Foo와 동일한 패키지에서 Test.properties를 로드합니다.

Foo.class.getResourceAsStream("/com/foo/bar/Test.properties")

com.foo.bar 패키지에서 Test.properties를 로드합니다.

이 지침을 준수하면 명령줄에서 애플리케이션을 실행할 때 getClass().getResource()를 사용하여 리소스 파일을 성공적으로 로드할 수 있습니다.

위 내용은 명령줄에서 실행할 때 getClass().getResource()가 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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