java - 将文件从字节数组写入 zip 文件

标签 java zip

我正在尝试将字节数组中的文件名“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/

相关文章:

java - 获取错误 : java. lang.IllegalArgumentException:不是有效的域名:jhipster uaa 项目中的 '192.168.0.202'

Java 通用类型语法

java - 在java中删除目录不是删除目录

objective-c - 用于从 Cocoa 应用程序浏览 zip 文件的库

java - 如何对 org.w3c.dom.Document 进行压缩和 base64

c# - 失败 - 下载由 Ionic.Zip.dll 制作的 zip 文件时出现网络错误

java - 如何更新启用 NETCONF 的设备上的配置?

java - 在 Java 的主要静态方法中调用非静态方法

java - 使用 action_view Intent 后 Android 应用程序崩溃

php - PHP 的 ZipArchive 的潜在安全问题