1

나는 받는다는을 사용하고 난 내 로컬 시스템의 폴더 내에서 파일을로드하려고 그것을 잘자바 항아리 받는다는 리소스 폴더 안에 파일을 찾을 수 없습니다

BufferedReader reader = new BufferedReader(new InputStreamReader(this.getClass().getResourceAsStream("/stopwords_german.txt"))); 
를 작동 할 때 src/main/resources 라는 sourcefolder에 TEXTFILE이

하지만 최대한 빨리 이클립스에서 프로젝트를로의 Runnable 항아리를 내보내고 내 서버에 단지를 시작으로 나는 그것은의 BufferedReader와 라인의 Nullpointer 예외

Exception in thread "main" java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:622) 
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58) 
Caused by: java.lang.NullPointerException 
    at java.io.Reader.<init>(Reader.java:78) 
    at java.io.InputStreamReader.<init>(InputStreamReader.java:72) 
    at de.test.dataminer.helper.FilterText.initStopwords(FilterText.java:43) 

를 얻을.

나는 여기에서 매우 비슷한 질문을 보았다. 그러나 나는 그것을 고치기 위해 테스트 한 결과 (은 클래스 로더으로 시도하는 것을 좋아한다). 누구든지 포인터 야?

<resources> 
     <resource> 
     <directory>/home/johnny/workspace/dataminer/src/main/resources</directory> 
     </resource> 
    </resources> 
+0

클래스 패스의 위치를 ​​고려하여 파일에 액세스하려고 시도 했습니까? I.E., 그것이'resources'에 있고,'new File ("filename.txt")'와 같은 하위 폴더가 아니라면? –

+1

Eclipse는 maven처럼 jar를 패키징하지 않을 가능성이 높습니다. maven을 사용하고 있으므로 maven-shade-plugin을 사용해보십시오. http://maven.apache.org/plugins/maven-shade-plugin/examples/executable-jar.html –

+0

pom.xml의 일부를 추가 할 수 있습니까? 패키징 리소스와 관련이 있습니까? 제 말은 플러그인 자체와 태그입니다. 문제가있을 수도 있습니다. –

답변

0

A 확인 : jar (ziip 형식)을 7zip 정도만 열면됩니다. 파일 이름은 대소 문자를 구분해야합니다 (Windows는 대소 문자를 구분하지 않습니다). IDE 외부에서 jar를 실행하여 테스트 할 수도 있습니다.

설명 : InputStreamReader에 인코딩을 추가하십시오. 그렇지 않으면 현재 운영 체제 인코딩이 적용됩니다. 모든 것이 맞는 경우

BufferedReader reader = new BufferedReader(
     new InputStreamReader(
      this.getClass().getResourceAsStream("/stopwords_german.txt"), 
      "Cp1252")); 

, 여전히 뭔가 잘못 될 수 있습니다 getClass()은 (아마도 상속을 통해) 할 수있는 몇 가지 클래스를 단지 외부. 그런 다음 SomeClassInJar.class.getResource과 같은 작업을하거나 앞에 슬래시가없는 ClassLoader.getResourceAsStrean("stopwords_german.txt")을 사용하십시오.

+0

이미 위에서 언급했듯이 Classloader – Johnny000