使用ZipOutPutStream Java压缩(zip)文件列表

时间:2017-03-23 16:15:02

标签: java xml rest bytearrayoutputstream zipoutputstream

我正在尝试压缩在字符串上转换的Xml列表,只将它们保存在一个zip文件中,并在restful上作为POST的主体返回。但每次我保存文件时都会收到错误"存档格式未知或损坏"。

protected ByteArrayOutputStream zip(Map<String, String> mapConvertedXml) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ZipOutputStream zos = new ZipOutputStream(baos);
    try {
        for(Map.Entry<String, String> current : mapConvertedXml.entrySet()){

            ZipEntry entry = new ZipEntry(current.getKey() + ".xml");
            entry.setSize(current.getValue().length());
            zos.putNextEntry(entry);
            zos.write(current.getValue().getBytes());
            zos.flush();
        }

        zos.close();

    } catch (IOException ioe) {
        ioe.printStackTrace();
    }
    return baos;
}

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

要测试您的zip文件,请将其暂时保存在您的文件系统中并手动打开。

FileOutputStream fos = new FileOutputStream(pathToZipFile);
ZipOutputStream zos = new ZipOutputStream(fos);

然后,您可以使用类似的东西构建您的Rest服务器并返回您的文件。

public static Response getFileLast(@Context UriInfo ui, @Context HttpHeaders hh) {
    Response response = null;
    byte[] sucess = null;
    ByteArrayOutputStream baos = getYourFile();
    sucess = baos.toByteArray();
    if(sucess!=null) {
        response = Response.ok(sucess, MediaType.APPLICATION_OCTET_STREAM).header("content-disposition","attachment; filename = YourFileName").build();
    } else {
        response = Response.status(Status.NOT_FOUND).type(MediaType.APPLICATION_JSON).entity(new Error("Error downloading file.")).build();
    }

    return response;
}

例如,您可以测试此Advanced Rest Client