리턴 된 InputStream은 널입니다. 가능한 원인은 무엇입니까?InputStream은 다음과 같습니다. App.class.getResourceAsStream ("test.properties");
답변
App.class.getResourceAsStream(resource)
검색 등 클래스 (App
클래스가 패키지 com.yourcompany
에있는 경우 com/yourcompany/test.properties
)를 검색합니다. 귀하의 상황에서 당신은 슬래시를 앞에 추가 또는 대신 클래스의 클래스 로더를 사용해야 중 하나
A)
App.class.getResourceAsStream("/test.properties")
B)
App.class.getClassLoader().getResourceAsStream("test.properties")
test.properties
파일을 찾을 수 없습니다.
원인은 대개 파일을 찾을 수 없다는 것입니다. (드물게 앱에 읽기 권한이 없다는 것입니다.) 일반적인 문제는 선도 경로 표시기 (아마도 단지 /
)가 필요하다는 것입니다. 기본 검색은 App 클래스의 클래스 로더를 기반으로하며 아마도 원하는 것은 아닙니다.
내 클래스에서 하위 폴더에서 액세스 할 수있는 컴/없음/내 특성에 있습니다 루트 directory.anything에서 잘못? – user496949
무엇의 루트 디렉토리? 프로젝트 또는 파일 시스템? (getResourceAsStream으로 열려면 프로젝트의 일부 여야합니다.) 파일 이름에 선행하는'/'을 넣고 무슨 일이 일어나는 지 봅니다. 당신이 묘사 한 바에 따르면 그것은 잘 작동 할 것입니다. –
은 "실제 디렉토리는"당신의 클래스에있는 폴더/패키지에 올바른 사용 :.
InputStream is = App.class.getResourceAsStream(“../../test.properties”);
아니면 : 같은 계층의 자원에 대한
InputStream is = App.class.getResourceAsStream(“/test.properties”);
+1 ../때로는 도움이 될 수 있고 그것에 대해 생각해 본 다른 사람이 없습니다 –
하는 ./test 확인하는 방법 .properties가 클래스 경로에 있습니까?
나는 당신이 실제로 클래스 패스가 무엇인지, 그리고 어떻게 설정되어 있는지를 알고 있다고 가정한다. 그리고 그것은 어떤 클래스 로더 이죠. 그렇다면 ...
클래스 경로는 "/ a/b/c/d"또는 "/some/pkg/SomeClass.class"와 같은 계층 적 이름을 가진 리소스의 네임 스페이스를 정의합니다. 이것을 클래스 로더 네임 스페이스이라고합니다. getResourceAsStream(path)
메서드를 호출하면 클래스 로더가 클래스 로더 네임 스페이스 ...에있는 경로가 path
으로 지정된 리소스를 찾은 다음 리소스를 읽는 데 필요한 바이트 스트림을 반환하도록 클래스 로더에게 지시합니다.
경로는 두 가지가 있습니다. 절대 경로는 "/"로 시작하고 상대 경로는 "/"이외의 다른 문자로 시작합니다.
당신이 절대 경로 (예 : "https://stackoverflow.com/a/b/test.properties"를 사용하는 경우, 당신은 절대 경로 클래스 로더 네임 스페이스에 당신이 준 경로와 동일한 자원을 얻을 것이다.
이 경우 당신이
import some.pkg.App; // for instance App.class.getResourceAsStream("test.properties");
을 사용하는 상대 경로 (예 : "test.properties") 당신이 그것을로드되는 상황에, 다음 상대 경로가 해결 될 때 상대를. 사용하는 경우 경로 이름을 해석하기위한 컨텍스트는의 경로 이름이됩니다.클래스 패키지; 즉 "/ some/pkg"입니다. 따라서 클래스 로더는 네임 스페이스의 절대 이름이 "/some/pkg/test.properties"인 리소스를 찾습니다. (패키지 이름에서 클래스 로더 네임 스페이스의 경로 이름으로의 매핑은 패키지 FQN의 "."구분 기호를 "/"구분 기호로 대체하는 것과 관련이 있습니다.)
다른 처리기에서는 클래스 로더 핸들을 직접 사용하여 리소스를로드하는 경우; 예 :
App.class.getClassLoader().getResourceAsStream("test.properties");
(가) 위의 "/test.properties"... 네임 스페이스에 해결할 클래스 로더가 사용하는 "/"문맥으로, 그래서.
"test.properties"파일을 어디에 넣을지 고쳐야합니다. 그러면 사용중인 호출에서 찾을 수 있습니다. 또는 절대 이름을 사용할 수 있습니다.
그런 일을 피하려면 모든 속성 파일을 루트 컨텍스트에 두는 것이 좋습니다. 그래서 당신이
App.class.getResourceAsStream("/test.properties")
- 1. 다음 이유는 다음과 같습니다.
- 2. 확장명이 페이지는 다음과 같습니다 ...
- 3. 분할 필드는 다음과 같습니다
- 4. 문제는 다음과 같습니다
- 5. 은 다음과 같습니다
- 6. 출력의 특수 문자는 다음과 같습니다.
- 7. makeTest() 메소드의 applicationcontext는 다음과 같습니다.
- 8. 우리는 현재 다음과 같습니다 테이블이
- 9. 내 설정은 다음과 같습니다 CLI
- 10. I는 다음과 같습니다 템플릿이 템플릿
- 11. I는 다음과 같습니다 레거시 기능이
- 12. 일반 텍스트 텍스트는 다음과 같습니다
- 13. JQuery와는 다음과 같습니다 입력 요소
- 14. 방법으로 그룹에 나는 다음과 같습니다 데이터가 MySQL을
- 15. 스파크 이미지는 내가 다음과 같습니다 렌더러가
- 16. 동일한 JS obfuscator 기능은 다음과 같습니다
- 17. PHP 배열 - 배열에서 배열을 만드시겠습니까? 다음과 같습니다
- 18. I는 다음과 같습니다 WPF에서 flowdocument이 WPF에서 FlowDocument
- 19. 안전하게 삽입은 다음과 같습니다 자바 스크립트
- 20. mutableArrayValueForKey와 insertObject 호출의 차이점은 다음과 같습니다. inEmployeesAtIndex :
- 21. 된 UpdatePanel rerenders가 나는 다음과 같습니다 ASCX이
- 22. 사용하여 I는 다음과 같습니다 코드를 파이썬
- 23. 스칼라 내가 다음과 같습니다 XML이 XML
- 24. 게시물 데이터 형식이 다른 경우 다음과 같습니다.
- 25. 다음과 같습니다 코드의 빠른 경로가있다 멀티 스레딩
- 26. InputStream은 파일 끝나기 전에 -1을 반환합니다.
- 27. XML을 포함하는 문자열을 처리하는 가장 효과적인 방법은 다음과 같습니다.
- 28. 암호화 - 같은 변수 해독 - 내 변수는 다음과 같습니다 경우 PHP
- 29. 와 탐색을 설정하는 방법은 다음과 같습니다 스프라이트를 디자인 한 이미지
- 30. 안드로이드 플랫폼에서 http 연결에 가장 안정적이고 효율적인 방법은 다음과 같습니다.
나를 위해 파일이 항아리에 없습니다. 응용 프로그램을 정리/다시 빌드하면 문제가 해결됩니다. – emrahgunduz