java - 如何将字节数组映射写入 ZIP 文件

标签 java zip

我正在尝试将 String 和 byteArray 的映射写入 zip 文件中,而不创建物理文件本身。 该字符串将是文件的名称。我设法创建了 zip,但创建的 zip 内的文件有 0 字节

public void zipFiles2(Map<String, byte[]> inMap) {

        FileOutputStream fos = null;
        ZipOutputStream zos = null;

        try {
            fos = new FileOutputStream("C:\\Desktop\\testing1.zip");
            zos = new ZipOutputStream(new BufferedOutputStream(fos));
            for (Map.Entry<String, byte[]> pair : inMap.entrySet()) {
                ZipEntry entry = new ZipEntry(pair.getKey());
                System.out.println("Zipping the file: " + pair.getKey());
                entry.setSize(pair.getValue().length);
                zos.putNextEntry(entry);
                byte[] tmp = new byte[4 * 1024];
                int size = 0;
                zos.write(tmp, 0, size);
                zos.flush();

            }
            zos.close();
            System.out.println("Done... Zipped the files...");
        } catch (FileNotFoundException e) {

            e.printStackTrace();
        } catch (IOException e) {

            e.printStackTrace();
        } finally {
            try {
                if (fos != null) {
                    fos.close();
                }
            } catch (Exception ex) {

            }
        }
    }

最佳答案

将代码更改为:

ZipEntry entry = new ZipEntry(pair.getKey());
entry.setSize(pair.getValue().length);
zos.putNextEntry(entry);
zos.write(pair.getValue());
zos.flush();

您从空的 byte[] (byte[] tmp = new byte[4 * 1024];) 中写入零字节 (int size = 0;),而不是 Map 中的字节。

关于java - 如何将字节数组映射写入 ZIP 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48920213/

相关文章:

java - 在两个类之间通信增量器

go - 用golang解压文件的简单方法

c - 将二进制数据(从文件)读入结构

zip - 压缩旋转日志文件的实用程序?

java.util.zip.ZipOutputStream - 更快地压缩大文件?

java - 将java独立程序部署到Tomcat服务器时的目录配置

java - 在java中将日期和时间转换为其他时区

java - 如何避免使用双循环来改进这种方法?

java - DecimalFormat 未给出预期格式(印度数字系统)

Gradle - "apply from"一个 ZIP 依赖​​项