我正在尝试将字节数组中的文件名“content”写入现有的 zip 文件中。
到目前为止,我已经成功编写了一个文本文件\将特定文件添加到同一个 zip 中。 我想做的是同样的事情,只是代替文件,而是表示文件的字节数组。我正在编写这个程序,以便它能够在服务器上运行,因此我无法在某处创建物理文件并将其添加到 zip 中,这一切都必须发生在内存中。
这是我到目前为止的代码,没有“将字节数组写入文件”部分。
public static void test(File zip, byte[] toAdd) throws IOException {
Map<String, String> env = new HashMap<>();
env.put("create", "true");
Path path = Paths.get(zip.getPath());
URI uri = URI.create("jar:" + path.toUri());
try (FileSystem fs = FileSystems.newFileSystem(uri, env)) {
Path nf = fs.getPath("avlxdoc/content");
try (BufferedWriter writer = Files.newBufferedWriter(nf, StandardOpenOption.CREATE)) {
//write file from byte[] to the folder
}
}
}
(我尝试使用 BufferedWriter 但它似乎不起作用......)
谢谢!
最佳答案
不要使用BufferedWriter
来写入二进制内容! Writer
用于编写文本内容。
使用它来代替:
final Path zip = file.toPath();
final Map<String, ?> env = Collections.emptyMap();
final URI uri = URI.create("jar:" + zip.toUri());
try (
final FileSystem zipfs = FileSystems.newFileSystem(uri, env);
) {
Files.write(zipfs.getPath("into/zip"), buf,
StandardOpenOption.CREATE, StandardOpenOption.APPEND);
}
(注意:APPEND
在这里是一个猜测;从你的问题来看,如果文件已经存在,你想追加;默认情况下,内容将被覆盖)
关于java - 将文件从字节数组写入 zip 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30234198/