我正在使用ZipOutputStream将一些上下文写入ZIP文件。我正在使用try-with-resources语句来关闭压缩流。
写作时我必须在ZIP流中写一个String条目内容。所以我的代码看起来像这样:
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
答案 0 :(得分:0)
谢谢大家。
这是一个FindBugs错误。
有一种方法可以避免它 - 使用Apache Commons的IOUtils.write(commons-io)。
答案 1 :(得分:0)
这不是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();
...
}