2011-01-21 2 views
7
public class ABC { 
    public ABC() { 
     File file = new File("xyz.xml"); 

에서 예외를 발견하지만 난 내 항아리를 실행할 때 다음과 같이하지 : 다음파일은 항아리

java -jar filename.jar arguments.... 

가 표시되고 오류 :

내가 그것을 어떻게

java.lang.IllegalArgumentException: InputStream cannot be null 
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:120) 
at com.ensarm.niidle.web.proxy.ABC.<init>(ABC.java:47) 
을 를 해결할 수 를?

답변

10

JAR 파일 내용을 읽어야 할 경우 File 클래스를 직접 사용할 수 없습니다. 클래스 로더를 사용 그것을로드 :

// for example read the SeleniumConfiguration.xml in the default package

InputStream input = SeleniumConfiguration.class.getResourceAsStream("/SeleniumConfiguration.xml"); 
+1

예, 정확합니다. "파일"은 사용자가 OS 또는 네트워크에 있다고 가정하기 때문에 열 수 없습니다. 항아리를 "안을"볼 수는 없습니다. 좋은 대답 @ qrtt1. 당신은 나를 어떻게 묘사 할 지에 대해 나를 때렸다. :) –

+0

고맙습니다. qrtt1 – swarup7m

4

NullPointerException이 파일을 찾을 수 없다는 명확한 표시입니다.

InputStream input=ABC.class.getResourceAsStream("/Element.xml");

XML 파일은 어디에 있습니까? 이 파일을 ABC.class와 같은 패키지 (jar 파일의 디렉토리)에 넣으면 슬래시가없는 Element.xml이어야합니다.

0

jar 파일의 루트에 xml 파일을 넣었습니까? 당신이 "/Element.xml"와 같은 경로를 사용하는 경우, jar 파일 구조가 같아야합니다

항아리 파일

  • 닷컴
  • META-INF
  • Element.xml
+0

그리고 자동 시스템을 사용하여 jar 파일을 만드는 경우 (수동으로 jar 파일을 실행하는 것과 반대), Linux에서는 적어도 jar 파일을 적게 실행하여 포함 된 파일을 확인하거나 jar -xvf를 사용하여 jar 파일을 추출합니다. – James

+0

'jar -tf'는 파일 목록을보기 위해서입니다. – Thilo

1

일반적으로 InputStream을 제안대로 사용할 수 있지만 외부 응용 프로그램 등을 사용하여 파일을 암호 해독하는 등 Java 이외의 작업을 수행하려는 경우 FileOutputStream을 사용하여이 스트림을 파일에 기록한 다음 i를 사용할 수 있습니다. t의 경로를 올바른 파일 경로로 지정하십시오. 간단히 말해,이 파일을 파일 시스템에 압축 해제 할 수 있습니다.