java - 当OutputStream存储为成员时,使用XmlStreamWriter写入它时似乎不起作用,是否不能将其作为成员传递?

标签 java xml outputstream fileoutputstream class-members

我正在尝试将 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”(即最后一行)行上放置一个断点,则当您单步执行该测试时,您可以看到文件在两种情况下都已写入。

问题出在你的设置方法上。

这就是正在发生的事情......

  1. 调用安装程序,创建outputStream(这将覆盖任何现有文件!!)
  2. testOutputStream 确实可以工作并输出文件
  3. 再次调用安装程序,因为此处创建了输出流,第一次测试的文件将被覆盖
  4. 第二个测试设置另一个输出流

基本上,将代码从设置方法移到第一个测试用例中

关于java - 当OutputStream存储为成员时,使用XmlStreamWriter写入它时似乎不起作用,是否不能将其作为成员传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28414541/

相关文章:

java - JasperReports - JSON 数据报告在 Java 中运行时显示空值

java - 如何在 objectify 中基于 JodaTime 进行过滤

java - 如何显示txt文件之间的不同单词?

java - 如果设置了 session 值,则 JSTL 读取无法正常工作

ruby - 哪些 Ruby 库支持 Relax NG 紧凑语法验证?

java - android数据库连接如何?

xml - RelaxNG compact schema 用于任一/两个元素的任意顺序

c++ - endl和 '\n'的区别

java - 用户定义对象序列化的 Junit 测试失败

Android:从 API 29 中的现有 URI 覆盖文件