在java中分配zip文件名并将其转换为bytearrayoutputstream

c86crjj0  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(649)

我目前正在尝试使用ZipOutStream创建zipfile,并将其作为bytearrayoutputstream返回。
但是,我现在想知道如何为zip本身分配文件名。
现在,它总是以我不想要的名称“application.zip”生成。
我尝试使用fileoutputstream分配它,但在解码后,它仍然使用默认命名,因此没有运气。
代码如下:

private static ByteArrayOutputStream convertZipToByte(
        final String fname, final String content) {
    try {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        FileOutputStream fos = new FileOutputStream("usethisinstead.zip");
        baos.writeTo(fos);
        final ZipOutputStream zos = new ZipOutputStream(baos);
        ZipEntry entry = new ZipEntry(fname);

        zos.putNextEntry(entry);
        zos.write(content.getBytes());
        zos.closeEntry();

        return baos;
    } catch (IOException ex) {
        // throwing error ex here
    }
}
ikfrs5lh

ikfrs5lh1#

您应该始终在正确的点关闭流,尝试使用资源自动处理此问题。
从文件写入中分离zip使逻辑更简单,并可重复使用nio调用,如下所示:

private static ByteArrayOutputStream
convertZipToByte(final String fname, final String content, final Path zip)
    throws IOException {

    ByteArrayOutputStream baos = new ByteArrayOutputStream();

    try(ZipOutputStream zos = new ZipOutputStream(baos)) {
        ZipEntry entry = new ZipEntry(fname);

        zos.putNextEntry(entry);
        zos.write(content.getBytes());
        zos.closeEntry();
    }
    try(OutputStream fos = Files.newOutputStream(zip)) {
        baos.writeTo(fos);
    }

    return baos;
}

为了调用上述命令,请创建一个文件系统 Path 例如:

convertZipToByte("content.txt","Hello World", Path.of("my.zip"));

相关问题