我正在尝试将 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/