getClass().getResource() vs getClass().getClassLoader().getResource()
getClass().getResource()는 호출한 클래스 패키지로 기준한 상대적인(relative) 리소스 경로로 리소스를 탐색하게 되고, getClass().getClassLoader().getResource()는 항상 절대적인(absolute) 리소스 경로로 리소스를 탐색하게 된다. 예외 규칙으로 getClass().getResource()로 전달하는 리소스 이름이 '/'로 시작하면 getClassLoader() 방식과 같이 절대 리소스 경로로 처리된다.아래의 결과는 같다.
foo.bar.Baz.class.getResource("xyz.txt");
foo.bar.Baz.class.getClassLoader().getResource("foo/bar/xyz.txt");
아래도 같다. getClass().getResource()로 전달된 리소스 이름이 '/'로 시작하기 때문에 절대 리소스 경로로 처리된다.foo.bar.Baz.class.getResource("/data/xyz.txt");
foo.bar.Baz.class.getClassLoader().getResource("data/xyz.txt");
[원문] https://stackoverflow.com/questions/6608795/what-is-the-difference-between-class-getresource-and-classloader-getresourcegetResource() vs getResourceAsStream()
내부 동작 방식은 같은데 getResource()는 URL 객체를 반환하고, getResourceAsStream()은 InputStream 객체를 반환한다.new FileInputStream 등으로 파일을 직접 읽지 않고 getResource(), getResourceAsStream()을 사용하는 이유
getResource(), getResourceAsStream()을 쓰면 jar로 패키징된 내부 파일을 직접 읽을 수 있다.[참고] 자바 클래스 로더 (Java Class Loader)
https://blog.naver.com/seokcrew/221608650295
댓글 없음:
댓글 쓰기