当 OutputStream 存储为成员时,使用 XmlStreamWriter 写入它似乎不起作用,它不能作为成员传递吗?
When OutputStream is stored as a member, it doesn't seem to work when writing to it using an XmlStreamWriter, can it not be passed as a member?
我正在尝试将 OutputStream
存储为 class 的成员,以便我可以通过多种方法写入它。我整理了这个 jUnit 测试来演示我遇到的问题。
public class XmlStreamWriterTest {
private OutputStream outputStream;
@Before
public void setUp() throws Exception {
File file = new File("xmltester.xml");
this.outputStream = new FileOutputStream(file);
}
@After
public void tearDown() throws Exception {
this.outputStream.close();
}
//This doesn't work.
@Test
public void testOutputStream() throws Exception {
XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newInstance();
XMLStreamWriter xmlStreamWriter = xmlOutputFactory.createXMLStreamWriter(this.outputStream);
xmlStreamWriter.writeStartElement("test");
xmlStreamWriter.writeCharacters("This is a test.");
xmlStreamWriter.writeEndElement();
xmlStreamWriter.flush();
}
//This works
@Test
public void testOutputStreamLocal() throws Exception {
File file = new File("xmltester2.xml");
OutputStream outputStreamLocal = new FileOutputStream(file);
XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newInstance();
XMLStreamWriter xmlStreamWriter = xmlOutputFactory.createXMLStreamWriter(outputStreamLocal);
xmlStreamWriter.writeStartElement("test");
xmlStreamWriter.writeCharacters("This is a test.");
xmlStreamWriter.writeEndElement();
xmlStreamWriter.close();
}
}
在生成的文件中,只有第二种方法将任何值推送到文件。我是否必须将 OutputStream
直接传递给每个方法?为什么 testOutputStream()
方法不起作用?
我使用的是 jrockit jdk 1.6.0_29,但我在 JDK 8 上尝试了 运行,但效果相同。
如果您在调试器中单步执行此测试并在每个测试的 "flush/close"(即最后一行)上放置一个断点,当您跨过它时,您可以看到文件在两种情况下都已写入.
问题出在你的设置方法上。
这就是正在发生的事情...
- 调用安装程序,创建输出流(这将覆盖任何现有文件!!)
- testOutputStream 确实有效并输出文件
- 再次调用安装程序,因为这里创建了一个输出流,第一次测试的文件将被覆盖
- 第二个测试设置另一个输出流
基本上,将设置方法中的代码移到第一个测试用例中
我正在尝试将 OutputStream
存储为 class 的成员,以便我可以通过多种方法写入它。我整理了这个 jUnit 测试来演示我遇到的问题。
public class XmlStreamWriterTest {
private OutputStream outputStream;
@Before
public void setUp() throws Exception {
File file = new File("xmltester.xml");
this.outputStream = new FileOutputStream(file);
}
@After
public void tearDown() throws Exception {
this.outputStream.close();
}
//This doesn't work.
@Test
public void testOutputStream() throws Exception {
XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newInstance();
XMLStreamWriter xmlStreamWriter = xmlOutputFactory.createXMLStreamWriter(this.outputStream);
xmlStreamWriter.writeStartElement("test");
xmlStreamWriter.writeCharacters("This is a test.");
xmlStreamWriter.writeEndElement();
xmlStreamWriter.flush();
}
//This works
@Test
public void testOutputStreamLocal() throws Exception {
File file = new File("xmltester2.xml");
OutputStream outputStreamLocal = new FileOutputStream(file);
XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newInstance();
XMLStreamWriter xmlStreamWriter = xmlOutputFactory.createXMLStreamWriter(outputStreamLocal);
xmlStreamWriter.writeStartElement("test");
xmlStreamWriter.writeCharacters("This is a test.");
xmlStreamWriter.writeEndElement();
xmlStreamWriter.close();
}
}
在生成的文件中,只有第二种方法将任何值推送到文件。我是否必须将 OutputStream
直接传递给每个方法?为什么 testOutputStream()
方法不起作用?
我使用的是 jrockit jdk 1.6.0_29,但我在 JDK 8 上尝试了 运行,但效果相同。
如果您在调试器中单步执行此测试并在每个测试的 "flush/close"(即最后一行)上放置一个断点,当您跨过它时,您可以看到文件在两种情况下都已写入.
问题出在你的设置方法上。
这就是正在发生的事情...
- 调用安装程序,创建输出流(这将覆盖任何现有文件!!)
- testOutputStream 确实有效并输出文件
- 再次调用安装程序,因为这里创建了一个输出流,第一次测试的文件将被覆盖
- 第二个测试设置另一个输出流
基本上,将设置方法中的代码移到第一个测试用例中