无法使用XML文件.InputStream为null

Duc*_*e88 1 java xml inputstream

我在这做错了什么?我收到错误,输入流中没有任何内容,但事实并非如此.文件在那里,标题正确.我想抓住我放在XML文件中的ip地址.是否有更好的方法来解析文件而不是dBuilder.parse(XMLReader.class.getResourceAsStream("C:\\Tools\\CLA\\test.xml"));

我遇到了这个例外:

Caused by: java.lang.IllegalArgumentException: InputStream cannot be null
    at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
    at com.Intel.ameier.XMLparser.TryXML(XMLparser.java:17)
Run Code Online (Sandbox Code Playgroud)

这是代码:

import java.io.IOException;
import org.xml.sax.*;
import org.w3c.dom.*;
import javax.xml.parsers.*;

public class XMLparser {

    protected void TryXML() throws ParserConfigurationException, SAXException, IOException{

        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();

        DocumentBuilder dBuilder = builderFactory.newDocumentBuilder();
        Document document = dBuilder.parse(XMLReader.class.getResourceAsStream("C:\\Tools\\test.xml"));
        document.normalize();

        NodeList rootNodes = document.getElementsByTagName("info");
        Node rootNode = rootNodes.item(0);
        Element rootElement = (Element)rootNode;
        NodeList compList = rootElement.getElementsByTagName("computer");
        for(int i = 0;i < compList.getLength(); i++){

            Node computer = compList.item(i);
            Element compElement = (Element)computer;

            Node theIP = compElement.getElementsByTagName("ipaddress").item(0);
            Element theIpElement = (Element)theIP;

            System.out.println("The comptuer ip is : " + theIpElement.getTextContent());


        }


    }


}
Run Code Online (Sandbox Code Playgroud)

XML文件:

<?xml version="1.0"?>
<info>
    <testsuite>
        <name></name>
    </testsuite>
    <computer>
        <ipaddress>111.11.11.6</ipaddress>
    </computer>
    <computer>
        <ipaddress>111.11.11.5</ipaddress>
    </computer>
    <computer>
        <ipaddress>111.11.11.3</ipaddress>
    </computer>
</info>
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

这与XML无关.你正在使用Class.getResourceAsStream,这是为了从该类的类加载器的类路径中加载资源......但是你传递的是文件名.

如果要为文件创建输入流,只需使用FileInputStream:

Document document = dBuilder.parse(new FileInputStream("C:\\Tools\\test.xml"));
Run Code Online (Sandbox Code Playgroud)

或者更好,为了关闭流:

Document document:

try (InputStream stream = new FileInputStream("C:\\Tools\\test.xml")) {
    document = dBuilder.parse(stream);
}
Run Code Online (Sandbox Code Playgroud)