java.lang.IllegalArgumentException:要分析的InputStream为null
请帮助我知道我的代码有什么问题。操作系统:Windows7 代码1:java.lang.IllegalArgumentException:要分析的InputStream为null,java,xml,apache-commons-digester,Java,Xml,Apache Commons Digester,请帮助我知道我的代码有什么问题。操作系统:Windows7 代码1: DigestStudents ds = (DigestStudents) digester.parse(this.getClass() .getClassLoader() .getResourceAsStream("leo/test/digester/student/student.xml")); true:is
DigestStudents ds = (DigestStudents) digester.parse(this.getClass()
.getClassLoader()
.getResourceAsStream("leo/test/digester/student/student.xml"));
true:isFile:isHidden:false
java.lang.IllegalArgumentException: InputStream to parse is null
at org.apache.commons.digester3.Digester.parse(Digester.java:1621)
at leo.test.digester.student.DigestStudents.digest(DigestStudents.java:41)
at leo.test.digester.student.DigestStudents.main(DigestStudents.java:16)
File f = new File ("D:/workspace/RD_Axway/src/leo/test/digester/student/student.xml");
System.out.println(f.isFile()+":isFile:isHidden:"+f.isHidden());
DigestStudents ds = (DigestStudents) digester.parse(f);
true:isFile:isHidden:false
log4j:WARN No appenders could be found for logger (org.apache.commons.digester3.Digester).
log4j:WARN Please initialize the log4j system properly.
java.lang.NullPointerException
at org.apache.commons.digester3.Digester.getXMLReader(Digester.java:790)
at org.apache.commons.digester3.Digester.parse(Digester.java:1588)
at org.apache.commons.digester3.Digester.parse(Digester.java:1557)
at leo.test.digester.student.DigestStudents.digest(DigestStudents.java:41)
at leo.test.digester.student.DigestStudents.main(DigestStudents.java:16)
例外情况1:
DigestStudents ds = (DigestStudents) digester.parse(this.getClass()
.getClassLoader()
.getResourceAsStream("leo/test/digester/student/student.xml"));
true:isFile:isHidden:false
java.lang.IllegalArgumentException: InputStream to parse is null
at org.apache.commons.digester3.Digester.parse(Digester.java:1621)
at leo.test.digester.student.DigestStudents.digest(DigestStudents.java:41)
at leo.test.digester.student.DigestStudents.main(DigestStudents.java:16)
File f = new File ("D:/workspace/RD_Axway/src/leo/test/digester/student/student.xml");
System.out.println(f.isFile()+":isFile:isHidden:"+f.isHidden());
DigestStudents ds = (DigestStudents) digester.parse(f);
true:isFile:isHidden:false
log4j:WARN No appenders could be found for logger (org.apache.commons.digester3.Digester).
log4j:WARN Please initialize the log4j system properly.
java.lang.NullPointerException
at org.apache.commons.digester3.Digester.getXMLReader(Digester.java:790)
at org.apache.commons.digester3.Digester.parse(Digester.java:1588)
at org.apache.commons.digester3.Digester.parse(Digester.java:1557)
at leo.test.digester.student.DigestStudents.digest(DigestStudents.java:41)
at leo.test.digester.student.DigestStudents.main(DigestStudents.java:16)
代码2:
DigestStudents ds = (DigestStudents) digester.parse(this.getClass()
.getClassLoader()
.getResourceAsStream("leo/test/digester/student/student.xml"));
true:isFile:isHidden:false
java.lang.IllegalArgumentException: InputStream to parse is null
at org.apache.commons.digester3.Digester.parse(Digester.java:1621)
at leo.test.digester.student.DigestStudents.digest(DigestStudents.java:41)
at leo.test.digester.student.DigestStudents.main(DigestStudents.java:16)
File f = new File ("D:/workspace/RD_Axway/src/leo/test/digester/student/student.xml");
System.out.println(f.isFile()+":isFile:isHidden:"+f.isHidden());
DigestStudents ds = (DigestStudents) digester.parse(f);
true:isFile:isHidden:false
log4j:WARN No appenders could be found for logger (org.apache.commons.digester3.Digester).
log4j:WARN Please initialize the log4j system properly.
java.lang.NullPointerException
at org.apache.commons.digester3.Digester.getXMLReader(Digester.java:790)
at org.apache.commons.digester3.Digester.parse(Digester.java:1588)
at org.apache.commons.digester3.Digester.parse(Digester.java:1557)
at leo.test.digester.student.DigestStudents.digest(DigestStudents.java:41)
at leo.test.digester.student.DigestStudents.main(DigestStudents.java:16)
例外情况2:
DigestStudents ds = (DigestStudents) digester.parse(this.getClass()
.getClassLoader()
.getResourceAsStream("leo/test/digester/student/student.xml"));
true:isFile:isHidden:false
java.lang.IllegalArgumentException: InputStream to parse is null
at org.apache.commons.digester3.Digester.parse(Digester.java:1621)
at leo.test.digester.student.DigestStudents.digest(DigestStudents.java:41)
at leo.test.digester.student.DigestStudents.main(DigestStudents.java:16)
File f = new File ("D:/workspace/RD_Axway/src/leo/test/digester/student/student.xml");
System.out.println(f.isFile()+":isFile:isHidden:"+f.isHidden());
DigestStudents ds = (DigestStudents) digester.parse(f);
true:isFile:isHidden:false
log4j:WARN No appenders could be found for logger (org.apache.commons.digester3.Digester).
log4j:WARN Please initialize the log4j system properly.
java.lang.NullPointerException
at org.apache.commons.digester3.Digester.getXMLReader(Digester.java:790)
at org.apache.commons.digester3.Digester.parse(Digester.java:1588)
at org.apache.commons.digester3.Digester.parse(Digester.java:1557)
at leo.test.digester.student.DigestStudents.digest(DigestStudents.java:41)
at leo.test.digester.student.DigestStudents.main(DigestStudents.java:16)
Student.java
package leo.test.digester.student;
public class Student {
private String name;
private String course;
public Student() {
}
public String getName() {
return name;
}
public void setName(String newName) {
name = newName;
}
public String getCourse() {
return course;
}
public void setCourse(String newCourse) {
course = newCourse;
}
public String toString() {
return("Name="+this.name + " & Course=" + this.course);
}
}
package leo.test.digester.student;
import java.util.Vector;
import org.apache.commons.digester3.Digester;
public class DigestStudents {
Vector students;
public DigestStudents() {
students= new Vector();
}
public static void main(String[] args) {
DigestStudents digestStudents = new DigestStudents();
digestStudents.digest();
}
private void digest() {
try {
Digester digester = new Digester();
//Push the current object onto the stack
digester.push(this);
//Creates a new instance of the Student class
digester.addObjectCreate( "students/student", Student.class );
//Uses setName method of the Student instance
//Uses tag name as the property name
digester.addBeanPropertySetter( "students/student/name");
//Uses setCourse method of the Student instance
//Explicitly specify property name as 'course'
digester.addBeanPropertySetter( "students/student/course", "course" );
//Move to next student
digester.addSetNext( "students/student", "addStudent" );
File f = new File ("D:/workspace/RD_Axway/src/leo/test/digester/student/student.xml");
System.out.println(f.isFile()+":isFile:isHidden:"+f.isHidden());
DigestStudents ds = (DigestStudents) digester.parse(this.getClass()
.getClassLoader()
.getResourceAsStream("D:/workspace/RD_Axway/src/leo/test/digester/student/student.xml"));
//Print the contents of the Vector
System.out.println("Students Vector "+ds.students);
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void addStudent( Student stud ) {
//Add a new Student instance to the Vector
students.add( stud );
}
}
student.xml
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student>
<name>Java Boy</name>
<course>JSP</course>
</student>
<student>
<name>Java Girl</name>
<course>EJB</course>
</student>
</students>
我认为这句话有问题:
DigestStudents ds=(DigestStudents)digester.parse(this.getClass().getClassLoader().getResourceAsStream(“D:/workspace/RD_Axway/src/leo/test/digester/student/student.xml”)代码>
找不到资源,因此返回null。我认为这行有问题:
DigestStudents ds=(DigestStudents)digester.parse(this.getClass().getClassLoader().getResourceAsStream(“D:/workspace/RD_Axway/src/leo/test/digester/student/student.xml”)代码>
找不到资源,因此返回null。ClassLoader.getResourceAsStream在类路径中查找文件。
将getResourceAsStream更改为:
.getResourceAsStream("student.xml"));
确保指定了路径
D:/workspace/RD_Axway/src/leo/test/digester/student/
在类路径中,然后重新编译并再次运行它。ClassLoader.getResourceAsStream在类路径中查找文件。
将getResourceAsStream更改为:
.getResourceAsStream("student.xml"));
确保指定了路径
D:/workspace/RD_Axway/src/leo/test/digester/student/
在类路径中,然后重新编译并再次运行它。和getResourceAsStream
都处理与类路径相关的URI
您需要修改路径,使其与
getResourceAsStream("/leo/test/digester/student/student.xml");
getResource
和getresourceastream
都处理与类路径相关的URI
您需要修改路径,使其与
getResourceAsStream("/leo/test/digester/student/student.xml");
ClassLoader#getResourceAsStream()
能够定位相对于类路径的“根””的文件。您需要替换此行:
DigestStudents ds = (DigestStudents) digester.parse(this.getClass()
.getClassLoader()
.getResourceAsStream("D:/workspace/RD_Axway/src/leo/test/digester/student/student.xml"));
与
ClassLoader#getResourceAsStream()
能够定位相对于类路径的“根””的文件。您需要替换此行:
DigestStudents ds = (DigestStudents) digester.parse(this.getClass()
.getClassLoader()
.getResourceAsStream("D:/workspace/RD_Axway/src/leo/test/digester/student/student.xml"));
与
获取加载我们类的对象的整个想法是能够从当前的系统设置、当前的绝对路径中独立地获取资源。
您在getResourceAsStream
中得到null,因为找不到文件。只需按照Kayaman的建议,将student.xml的路径设置为相对路径,或绝对路径
this.getClass()
.getClassLoader()
.getResourceAsStream("path/to/file/student.xml")
您可以通过classLoader.getResourceAsStream
以与加载当前类相同的路径搜索顺序获取文件。有关getResource,请参见javadoc:
java.lang.ClassLoader.getResource(字符串名称)
查找具有给定名称的资源。资源是一些数据
(图像、音频、文本等)可以通过类代码以某种方式访问
这与代码的位置无关
资源的名称是以“/”分隔的路径名,用于标识
资源
此方法将首先在父类装入器中搜索
资源;如果父级为null,则类装入器内置的路径为空
搜索到虚拟机。如果失败,这种方法将
调用findResource(字符串)以查找资源
由于这种通用性,代码更具可移植性,无论您是在Windows还是Linux上,甚至是在某些分布式系统上。关于加载类和可能的源的更多信息:获取加载类的对象的整个想法是能够从当前的系统设置、从当前的绝对路径独立地获取资源。
您在getResourceAsStream
中得到null,因为找不到文件。只需按照Kayaman的建议,将student.xml的路径设置为相对路径,或绝对路径
this.getClass()
.getClassLoader()
.getResourceAsStream("path/to/file/student.xml")
您可以通过classLoader.getResourceAsStream
以与加载当前类相同的路径搜索顺序获取文件。有关getResource,请参见javadoc:
java.lang.ClassLoader.getResource(字符串名称)
查找具有给定名称的资源。资源是一些数据
(图像、音频、文本等)可以通过类代码以某种方式访问
这与代码的位置无关
资源的名称是以“/”分隔的路径名,用于标识
资源
此方法将首先在父类装入器中搜索
资源;如果父级为null,则类装入器内置的路径为空
搜索到虚拟机。如果失败,这种方法将
调用findResource(字符串)以查找资源
由于这种通用性,代码更具可移植性,无论您是在Windows还是Linux上,甚至是在某些分布式系统上。有关加载类和可能的源的详细信息:将文件置于当前文件夹或uri格式
//placing the xml file in the current java file folder(which is not goog way of coding.
DigesterTest ds = (DigesterTest) digest.parse(this.getClass().getResourceAsStream(
"test.xml"));
DigesterTest ds = (DigesterTest) digest.parse("file://exact location of the file");
//created a xml folder under java project
DigesterTest ds = (DigesterTest) digest.parse(new File("xml/test.xml"));
将文件置于当前文件夹或uri格式
//placing the xml file in the current java file folder(which is not goog way of coding.
DigesterTest ds = (DigesterTest) digest.parse(this.getClass().getResourceAsStream(
"test.xml"));
DigesterTest ds = (DigesterTest) digest.parse("file://exact location of the file");
//created a xml folder under java project
DigesterTest ds = (DigesterTest) digest.parse(new File("xml/test.xml"));
请检查我的异常跟踪文件是否可用!简单地使用“!”:)在getResourceAsStream中使用绝对路径,如果我错了,请纠正我,它是相对于类路径根的。我建议你先把它放在你的src文件夹中,然后慢慢解决,或者你可以选择使用FileInputStream?如果你想坚持绝对文件路径,请检查我的更新问题,即使发送文件对象,它也不起作用。请检查我的异常跟踪文件是否可用!简单地使用“!”:)在getResourceAsStream中使用绝对路径,如果我错了,请纠正我,它是相对于类路径根的。我建议你先把它放在你的src文件夹中,然后慢慢解决,或者你可以选择使用FileInputStream?如果你想坚持绝对文件路径,请检查我更新的问题,即使发送文件对象,它也不起作用。如果student.xml
文件存在于你的类路径leo/test/digester/student/
中,那么它应该可以工作!谢谢你的帮助,但是我正在使用EclipseIDE,我试图将文件放在一个位置并