简体   繁体   English

使用Java解析大型XML文件

[英]Parse large XML file with java

I'm trying to read a huge XML file(2GB). 我正在尝试读取一个巨大的XML文件(2GB)。 So, I started of to use STAX and I've to use steam input. 因此,我开始使用STAX,而不得不使用蒸汽输入。 Below is the code 下面是代码

filePath = "D:/Data/sample.xml"; //Correct path
String tagContent = null;
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLStreamReader reader = null;
try{
    System.out.println("here");
    reader = factory.createXMLStreamReader(ClassLoader.getSystemResourceAsStream(filePath));
    System.out.println("Reader1:" + reader);
}
catch(Exception e)
{
    System.out.println("Error 4:" + e);
}
System.out.println("Reader2:" + reader);

Output returns error: 输出返回错误:

here
Error 4:javax.xml.stream.XMLStreamException: java.net.MalformedURLException
Reader2:null

How do I resolve this error? 如何解决此错误?

Method getSystemResourceAsStream opens for reading, a resource of the specified name from the search path used to load classes . 方法getSystemResourceAsStream 打开以供读取,该名称是用于加载class的搜索路径中具有指定名称的资源

You are going to read a file so open a file stream: 您将要读取文件,因此打开文件流:

        filePath = "D:/Data/sample.xml"; //Correct path
        String tagContent = null;
        XMLInputFactory factory = XMLInputFactory.newInstance();
        XMLStreamReader reader = null;
        try{
            System.out.println("here");
            reader = factory.createXMLStreamReader(new FileInputStream(new File(filePath)));
            System.out.println("Reader:" + reader);
        }
        catch(Exception e)
        {
            System.out.println("Error 4:" + e);
        }
        System.out.println("Reader:" + reader);

Following line appears to be throwing an exception 下一行似乎引发异常

reader = factory.createXMLStreamReader(ClassLoader.getSystemResourceAsStream(filePath)); reader = factory.createXMLStreamReader(ClassLoader.getSystemResourceAsStream(filePath));

which causes reader to remain null. 这会使阅读器保持为空。 Most probably class loading is not successful. 类加载很可能不成功。

我认为您的文件路径不是有效的网址 :请尝试: file:///D:/Data/sample.xml

ClassLoader.getSystemResourceAsStream(...) is using the system classloader . ClassLoader.getSystemResourceAsStream(...)正在使用system classloader Just use this.getClass().getResoruceAsStream(...) . 只需使用this.getClass().getResoruceAsStream(...)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM