我正在尝试将 OutputStream
存储为类的成员,以便我可以通过多种方法对其进行写入。我整理了这个 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”(即最后一行)行上放置一个断点,则当您单步执行该测试时,您可以看到文件在两种情况下都已写入。
问题出在你的设置方法上。
这就是正在发生的事情......
- 调用安装程序,创建outputStream(这将覆盖任何现有文件!!)
- testOutputStream 确实可以工作并输出文件
- 再次调用安装程序,因为此处创建了输出流,第一次测试的文件将被覆盖
- 第二个测试设置另一个输出流
基本上,将代码从设置方法移到第一个测试用例中
关于java - 当OutputStream存储为成员时,使用XmlStreamWriter写入它时似乎不起作用,是否不能将其作为成员传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28414541/