Java 将对象写入json格式的zip文件
我的目标是以json格式将对象写入zip文件。最简单的方法是:Java 将对象写入json格式的zip文件,java,json,gson,writer,zipoutputstream,Java,Json,Gson,Writer,Zipoutputstream,我的目标是以json格式将对象写入zip文件。最简单的方法是: ZipOutputStream zip = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFile))); String json = gson.toJson(object); zip.write(json.getBytes()); 但我希望避免将整个对象加载到单个字符串中。因此,我将压缩流包装到writer对象中: Writer writ
ZipOutputStream zip = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFile)));
String json = gson.toJson(object);
zip.write(json.getBytes());
但我希望避免将整个对象加载到单个字符串中。因此,我将压缩流包装到writer对象中:
Writer writer = new OutputStreamWriter(zip);
然后我用下面的方式写下条目:
zip.putNextEntry(entry);
gson.toJson(content, writer);
writer.flush();
zip.closeEntry();
zip.flush();
它工作得很好,但是同时使用writer和zip对象看起来非常混乱。对于这个问题有更好的解决方案吗?您可以使用Jackson使它更简单一些,它有直接写入
输出流的方法
ObjectMapper mapper = new ObjectMapper();
try (ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFile))){
out.putNextEntry(new ZipEntry("object.json"));
mapper.writeValue(out, object);
}
您可以使用Jackson使它变得更简单,它有直接写入输出流的方法
ObjectMapper mapper = new ObjectMapper();
try (ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFile))){
out.putNextEntry(new ZipEntry("object.json"));
mapper.writeValue(out, object);
}
您可以在语句中声明一个或多个资源。比如说
try (
ZipOutputStream zip = new ZipOutputStream(new BufferedOutputStream(new
FileOutputStream(zipFile)));
Writer writer = new OutputStreamWriter(zip);
) {
zip.putNextEntry(entry);
gson.toJson(content, writer);
}
按此顺序自动调用close方法。请注意,资源的close方法的调用顺序与其创建顺序相反。关于冲水
公共抽象void close()引发IOException
关闭流,首先冲洗流。一旦关闭流,进一步的write()或flush()调用将导致抛出IOException。关闭以前关闭的流无效。您可以在语句中声明一个或多个资源。比如说
try (
ZipOutputStream zip = new ZipOutputStream(new BufferedOutputStream(new
FileOutputStream(zipFile)));
Writer writer = new OutputStreamWriter(zip);
) {
zip.putNextEntry(entry);
gson.toJson(content, writer);
}
按此顺序自动调用close方法。请注意,资源的close方法的调用顺序与其创建顺序相反。关于冲水
公共抽象void close()引发IOException
关闭流,首先冲洗流。一旦关闭流,进一步的write()或flush()调用将导致抛出IOException。关闭以前关闭的流没有效果。那么你的问题是什么?对不起,我无意中发布了一篇未完成的文章。现在问题应该清楚了。假设json是默认的UTF-8,使用Writer Writer=newoutputStreamWriter(zip,StandardCharsets.UTF_8)代码>。为了连贯性,我会在putNextEntry之后创建作者。但从原则上讲,该准则确实是可行的;writer不应该在zip之前关闭,因为它会过早地关闭zip。我根本不会称之为“凌乱”。绝对正常。那你的问题是什么?对不起,我无意中发表了一篇未完成的文章。现在问题应该清楚了。假设json是默认的UTF-8,使用Writer Writer=newoutputStreamWriter(zip,StandardCharsets.UTF_8)代码>。为了连贯性,我会在putNextEntry之后创建作者。但从原则上讲,该准则确实是可行的;writer不应该在zip之前关闭,因为它会过早地关闭zip。我根本不会称之为“凌乱”。绝对正常。