Java getSystemResourceAsStream在解析XML时返回null

Java getSystemResourceAsStream在解析XML时返回null,java,xml,parsing,illegalargumentexception,Java,Xml,Parsing,Illegalargumentexception,我正在尝试从本地XML文件创建文档对象 这部分代码: DocumentBuilderFactory factoria = DocumentBuilderFactory.newInstance(); DocumentBuilder constructor = factoria.newDocumentBuilder(); Document documento = constructor.parse(ClassLoader.getSystemResourceAsStream(U

我正在尝试从本地XML文件创建文档对象

这部分代码:

    DocumentBuilderFactory factoria = DocumentBuilderFactory.newInstance();
    DocumentBuilder constructor = factoria.newDocumentBuilder();
    Document documento = constructor.parse(ClassLoader.getSystemResourceAsStream(URLXML));
导致以下异常:

线程“AWT-EventQueue-0”中出现异常 java.lang.IllegalArgumentException:InputStream在处不能为null javax.xml.parsers.DocumentBuilder.parse(未知源)

getSystemResourceAsStream()仅在找不到源代码时才应返回null,我已检查文件url是否正确存储在字符串中(它是C:\file.xml,这是文件的正确位置)


那么,什么是失败?我做错了什么?

将file.xml保留在类路径中。如果您的是WEB应用程序,请将其保存在WEB-INF中,或者将其保存在为独立应用程序执行java命令的文件夹中。

我使用
getsystemresourceastream
时遇到了相同的错误,因此我没有使用该错误,而是使用了:

parser.parse(new File(""), handler);

它工作得很好。

但是为什么要向类加载器请求资源?听起来你只是得到了一个文件名而不是资源名。。。那么为什么不使用
FileInputStream
?我询问classloader,因为根据我阅读的信息,不使用它可能会导致某些操作系统的可移植性问题。C:\file.xml不是有效的资源名称吗?那么正确的资源名是什么呢?它不是有效的资源名,而且类加载器无论如何也不会提供这种服务。如果您担心可移植性,
c:\file.xml
在大多数操作系统上都不是有效的文件。如果您试图加载文件,只需使用
FileInputStream
-并确保您拥有适合您所使用系统的文件名。好的,我将尝试重做代码以改用FileInputStream。windows下合适的文件名是什么?我直接从JFileChooser获取它,我应该先格式化它吗?(不过,我有点迷路了,我是一名学生,这是我第一次尝试做这样的项目。)如果你从JFileChooser获取文件名,那没关系。同一个文件名在不同的操作系统上不起作用,但你希望用户选择不同的文件…根据你的建议,我尝试过在类路径中使用该文件,但结果似乎是一样的。你能简要介绍一下你的环境吗…你使用的是IDE吗?是web应用还是独立应用…?它是独立应用。我正在使用Java1.7。我正在使用Eclipse(开普勒),这就是我运行代码的地方。