Java,StaX简单代码但得到解析错误,文件过早结束

Java,StaX简单代码但得到解析错误,文件过早结束,java,xml,eof,stax,malformed,Java,Xml,Eof,Stax,Malformed,我试图用StaX来计算IO,但我不断从阅读器中得到格式错误和过早的EOF错误。这是读取使用StaX创建的代码,如以下示例所示 我已经将代码简化为最简单的配置,但仍然得到一个错误。这是从哪里来的 SSCCE应该抛出错误 package XMLTest; import java.io.FileInputStream; import java.io.FileOutputStream; import javax.xml.stream.XMLEventFactory; import javax.xml

我试图用StaX来计算IO,但我不断从阅读器中得到格式错误和过早的EOF错误。这是读取使用StaX创建的代码,如以下示例所示

我已经将代码简化为最简单的配置,但仍然得到一个错误。这是从哪里来的

SSCCE应该抛出错误

package XMLTest;

import java.io.FileInputStream;
import java.io.FileOutputStream;

import javax.xml.stream.XMLEventFactory;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLEventWriter;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLOutputFactory;

public class SaveLoadTest {
    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        final String FILE = "test.xml";

        //////////// WRITE
        final XMLOutputFactory OFACT = XMLOutputFactory.newInstance();
        final XMLEventFactory EFACT = XMLEventFactory.newInstance();
        final XMLEventWriter WRITER = OFACT.createXMLEventWriter(new FileOutputStream(FILE));

        WRITER.add(EFACT.createStartDocument());
        WRITER.add(EFACT.createComment("As basic as it gets."));
        WRITER.add(EFACT.createEndDocument());
        WRITER.close();

        //////////// READ
        final XMLInputFactory IFACT = XMLInputFactory.newInstance();
        final XMLEventReader READER = IFACT.createXMLEventReader(new FileInputStream(FILE));

        while (READER.hasNext()) {
            READER.nextEvent();
        }
    }
}
错误是:

Exception in thread "main" javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,49]
Message: Premature end of file.
    at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:594)
    at com.sun.xml.internal.stream.XMLEventReaderImpl.nextEvent(XMLEventReaderImpl.java:85)
    at XMLTest.SaveLoadTest.main(SaveLoadTest.java:34)
我已经看了几个其他的SO问题,或者看起来最相关,但是我很难将它们与这种情况联系起来

编辑

另外,我尝试过在不同的操作中读写,同样的事情也发生了

编辑第二个

XML输出文件,如请求

<?xml version="1.0"?><!--As basic as it gets.-->

它期望XML文件具有根元素

如果将输出代码更改为创建元素,则该代码将正常工作:

    WRITER.add(EFACT.createStartDocument());
    WRITER.add(EFACT.createStartElement("", "", "element"));
    WRITER.add(EFACT.createEndElement("", "", "element"));
    WRITER.add(EFACT.createEndDocument());
输出到文件中

    <?xml version="1.0" encoding="UTF-8"?><element></element>

然后无错误地读取第一个事件。

它希望XML文件具有根元素

如果将输出代码更改为创建元素,则该代码将正常工作:

    WRITER.add(EFACT.createStartDocument());
    WRITER.add(EFACT.createStartElement("", "", "element"));
    WRITER.add(EFACT.createEndElement("", "", "element"));
    WRITER.add(EFACT.createEndDocument());
输出到文件中

    <?xml version="1.0" encoding="UTF-8"?><element></element>

然后读取第一个事件,没有错误。

请同时发布您的输入xml。没有输入xml,它是动态生成的-我只想创建一个标题,创建一条注释,关闭文档,然后稍后再阅读。这就是我的意思。test.xml应该在你的文件系统中可用。你能打印出READER.nextEvent的值吗?@AmitBhargava-哦,好的,是的。请发布你的输入xml。没有输入xml,它是动态生成的-我只想创建一个标题,创建一条注释,关闭文档,然后稍后阅读。这就是我的意思。test.xml应该在你的文件系统中可用。你能打印出READER.nextEvent的值吗?@AmitBhargava-哦,好的,是的,更新了。啊,它是这样的。谢谢不过我有一种不好的预感,肯定还会有更多的头痛头痛更新:没有!在这个小小的打嗝之后,其他的事情都很快解决了。向未来的施塔克斯致以最美好的祝愿。啊,的确如此。谢谢不过我有一种不好的预感,肯定还会有更多的头痛头痛更新:没有!在这个小小的打嗝之后,其他的事情都很快解决了。向未来的施塔克斯致以最良好的祝愿。