这段代码有味道吗?

Does this code smell?

我正在使用 ZipOutputStream. And I'm using try-with-resources 关闭 zip 流的语句将一些上下文写入 ZIP 文件。

在写作时,我必须在 ZIP 流中写入一个字符串条目内容。所以我的代码看起来是这样的:

try (ZipOutputStream zos = new ZipOutputStream(...)){
    ...
    zos.putNextEntry( new ZipEntry( "fileName.txt" ) );
    String content = "some text content here";
    OutputStreamWriter writer = new OutputStreamWriter( zos ); //(1)
    writer.write( content );
    writer.flush();
    ...
}

但 FindBugs 在第 (1) 行向我显示 OS_OPEN_STREAM 警告。

你怎么看?这段代码有味道吗?那怎么写比较好呢?

更新。 FindBugs v.3.0.1

谢谢大家

这是一个 FindBugs 错误。

有一种方法可以避免它 - 使用来自 Apache Commons (commons-io) 的 IOUtils.write。

这不是 FindBugs 错误,你没有关闭上面代码中的 writer,所以它正确地抱怨。 你应该这样做,例如:

try (
    ZipOutputStream zos = new ZipOutputStream(...);
    OutputStreamWriter writer = new OutputStreamWriter( zos )
){
    ...
    zos.putNextEntry( new ZipEntry( "fileName.txt" ) );
    String content = "some text content here";
    writer.write( content );
    writer.flush();
    ...
}