/src/initialization/Lifepaths.txt
코드 데 사용되는 파일을 로드할 수 있다.
public class Lifepaths {
public static void execute() {
System.out.println(Lifepaths.class.getClass().
getResourceAsStream("/initialization/Lifepaths.txt"));
}
private Lifepaths() {}
//This is temporary; will eventually be called from outside
public static void main(String[] args) {execute();}
}
항상 'null' 인쇄하십시오 인쇄 아웃해야, 내가 아무리 사용합니다. # 39 m, t # 39 위, i& 잘 모름 왜 wouldn& 작동합니까 도왔으매 I& # 39, 역시 이제는 시도했다.
" /src/initialization/Lifepaths.txt" '-';; " initialization/Lifepaths.txt" '-';; " Lifepaths.txt" '-';;
이러한 괜찼습니다 작동합니까. [I& # 39, ve] (https://stackoverflow.com/questions/12262062/getresourceasstream-returns-null) [읽기] (https://stackoverflow.com/questions/7017361/getresourceasstream-returning-null) [수많은] (https://stackoverflow.com/questions/2797162/getresourceasstream-is-always-returning-null) [질문] (https://stackoverflow.com/questions/2195445/eclipse-getresourceasstream-returning-null) 에서 지금까지 어느 누구도 항목를 있지만, 그들은 단지 그동안 도움됐네 - 일반적으로 루트 경로를 사용하여 파일을 로드할 수 있는 m I& # 39 라고 하고, 이미. 가공할지, 파일을 로드할 수 있는 현행 디렉토리에는 로드하십시오 '그냥' 파일_이름) 도 역시 이제는 I& # 39, 했다. Jar 파일은 컴파일됨 꽂으십시오 적절한 이름으로 적절한 위치에 있다.
이 문제를 어떻게 합니까?
규칙은 다음과 같습니다.
변경하고 etta.:
Lifepaths.class.getResourceAsStream("/initialization/Lifepaths.txt")
대신
Lifepaths.class.getClass().getResourceAsStream("/initialization/Lifepaths.txt")
(잘 모를 경우 따라서 차이가 있지만 전 사용할 올바른 클라슬로이더 / JAR, 동시에 I& # 39 m, rmw 함께 잘 모르겠습니다.)
그래서 여러 가지 방법으로 얻을 수 있는 경로를 통해 리소스에는 jar 및 각 약간 다른 구문을 지정할 수 있다 할 것이다.
나는 자바월드 에서 볼 수 있는 최적의 설명 로만스였나 기사. # 39 더 있지만, 여기에서 ll 요약하십시오 i& 궁금해할까봐 체크아웃합니다 합니다 글.
방법
형식: " 분판된 이름을 /" -;; 주요 " /" 없음;; (모든 이름은 절대값일).
예: 티s.제클레스 () ',' 이제르수크레스트림 그제클라슬로이더 () (some/pkg/resource.properties" ";)
형식: " 분판된 이름을 /" -;; 주요 " /"; 절대 이름을 나타냅니다. 다른 이름은 class& 관련된 모든 # 39 의 패키지
예: 이제르수크레스트림 티s.제클레스 () ',' (/some/pkg/resource.properties" ";)
Don& # 39, & # 39 를 기준으로 할 때 사용하는 t 상대경로를 패스이므로 resources& # 39;; 디렉터리입니다 프로젝트에서. & # 39 에서 표시하는 빠르고 더러운 코드를 미치스트리트스트 콘텐트입니다 디렉토리에는 resources& # 39;.;
@Test
public void testDefaultResource() {
// can we see default resources
BufferedInputStream result = (BufferedInputStream)
Config.class.getClassLoader().getResourceAsStream("MyTest.txt");
byte [] b = new byte[256];
int val = 0;
String txt = null;
do {
try {
val = result.read(b);
if (val > 0) {
txt += new String(b, 0, val);
}
} catch (IOException e) {
e.printStackTrace();
}
} while (val > -1);
System.out.println(txt);
}
할 수 있습니다 다음 정보기술 (it) 을 첫 공개 url 이 시도하시겠습니까 내려받습니다 이리에 스트리밍합니다 내려받습니다 스트리밍합니다.
URL url = getClass().getResource("/initialization/Lifepaths.txt");
InputStream strm = url.openStream();
내가 한때 비슷한 질문: # 16564611 https://stackoverflow.com/questions/16563622/reading-txt-file-from-jar-fails-but-reading-image-works/16564611
이와 유사한 문제를 직접 찾았다. 나는 내 포m.1믈 업데이트하려면 포함) 을 사용하여 메이븐 내가 필요한 만큼 이 같은 일이.
...
</dependencies>
<build>
<resources>
<resource>
<directory>/src/main/resources</directory>
</resource>
<resource>
<directory>../src/main/resources</directory>
</resource>
</resources>
<pluginManagement>
...
해당 폴더 안에 있는 태그번호 참고합니다 리소스에는 위치를 지정할 수 있다. 중첩할 경우 프로젝트 (그것을비유하사 나는한다) 을 얻을 수 있는 게 아니라 다른 분야 인력을 좋습니다 모듈에서는 작업하고. 이 같은 파일을 사용하는 경우 각 리포 비슷한 구성 데이터를 계속 줄일 수 있습니다.
Smartupdate 너회의 리소스에는 디렉터리입니다 (예를 들어 src" ";) 사용 중인 클래스 경로 (smartupdate it& # 39 의 소스 디렉토리에 구축하십시오 경로에 eclipse).
메인 smartupdate 클라치 로드되었는지 클라슬로이더.
그런 다음 src/initialization/Lifepaths.txt 로드하기에 사용합니다.
clazz.getResourceAsStream("/initialization/Lifepaths.txt");
그 이유는 다음과 같습니다. '에서' 는 foo 클린업합니다 클라치스게트레소르체사스트림 (foo) 의 기준으로 클라치 , 클라치 디렉토리에는 classpath 내에 살고 있다. 주요 " /"; 때문에 모든 디렉터리입니다 클라치 루트에서 로드하십시오 classpath 에 있다.
대략 말하기:
제클레스 이제르수르스 (/" ";) = ' ()' '~' 이제르수르스 그제콘테스트클라슬로이더 트레더스쿠르나토레더 () () (." ";)
예를 들어, 프로젝트에 구조는 다음과 같습니다.
"'
"'
"' 에서 맹크라수스자바 // 티s.제클레스이제르수르스 (/" ";) - >. " ~ /proj_dir/target/test-classes/"; 티s.제클레스이제르수르스 (." ";) - >. " ~ /proj_dir/target/test-classes/com/github/xyz/proj/"; 그제콘테스트클라슬로이더 이제르수크스 트레더스쿠르나토레더 () () (." ";) - >. " ~ /proj_dir/target/test-classes/"; 그제콘테스트클라슬로이더 이제르수크스 트레더스쿠르나토레더 () () (/" ";) - >. null
"'
Jvm 기본값입니다 클라슬로이더 클라슬로이더 모피쳐 사용할 로드하기에 자원을 먼저: ! [클라슬로이더 델스게이트 모피쳐] (https://jrebel.com/wp-content/uploads/2013/08/classloader-hierarchy.jpg).
',' & # 39 는 '부트스트랩에 라이프파스트클레스트제클레스 ()' 은 '검색' s 클라슬로이더 클라슬로이더 도왔으매 제레수르세아스트림 관계없이 만 $ JAVA_HOME 사용자 제공 '클래스'. 물론 라이프파스.t스트 없는.
& # 39 는 's 클래스', '라이프파스트클레스 클라슬로이더 시스템' 은 '검색' 클래스 '와' 도왔으매 클라슬로이더 제레수르세아스트림 사용자정의된 라이프파스.t스트 없습니다.
예를 들면 다음과 같습니다. "'jave 클라슬로이더 loader = 트레더스쿠르나토레더 그제콘테스트클라슬로이더 () (); 구체화하십시오 resourceName = " Lifepaths.txt";; 린퍼타슬림 레수르체스트림 = 로드리게트레소르세아스트림 (resourceName); "'