【问题标题】:Trying to save a String representation of zip file contents as a file in Java尝试将 zip 文件内容的字符串表示形式保存为 Java 中的文件
【发布时间】:2018-01-16 08:04:50
【问题描述】:

我有一个 zip 文件的内容,该文件是从客户端多部分表单数据 api 接收的,存储为字符串。

我现在只想将此数据保存为 zip 文件;但是,当我尝试如下保存到文件时,当我尝试打开文件时,我收到一条消息,说明

“Windows 无法打开该文件夹。压缩(压缩)文件夹 'C:\payload.zip' 无效。”

public void createFile(String data) {
    try {
        BufferedWriter out = new BufferedWriter(new FileWriter("c:\\payload.zip"));
        out.write(data);   
        out.close();
    }
    catch (IOException e)
    {
        System.out.println("Exception ");

    }
}

我只是将收到的字符串传递给上面显示的小测试 createFile 方法。

我以为我会在下面粘贴实际的字符串内容,但是当我尝试这样做时,它会将其转换为这个(不带双引号): “PK”

对我做错了什么有帮助吗?

【问题讨论】:

  • 压缩文件是一种二进制格式,而不仅仅是纯文本。使用ZipOutputStream 写入您的数据
  • 当您开始将二进制数据视为String 时,您就完蛋了。在您的情况下,这发生在接收表单数据时。

标签: java string file zip


【解决方案1】:

您可以使用 BufferedWriter 创建扩展名为 .zip 的文件,但不要期望该文件是压缩文件(二进制)

你可以使用类似下面的东西

看这个例子:

StringBuilder sb = new StringBuilder();
sb.append("your string data");

File f = new File("c:\\payload.zip");
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(f));
ZipEntry e = new ZipEntry("myFile.txt");
out.putNextEntry(e);
byte[] data = sb.toString().getBytes();
out.write(data, 0, data.length);
out.closeEntry();
out.close();

【讨论】:

    【解决方案2】:

    要将 zip 的文本表示再次保存为 zip 文件:

    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
                                                   new FileOutputStream("c:\\dest.zip"),
                                                   "Cp1252"));
    writer.write(data);   
    writer.close();
    

    或者你可以试试:

    FileOutputStream fos = new FileOutputStream("C:\\dest.zip");
    fos.write(data.getBytes());
    fos.close();
    

    【讨论】:

    • 嗨 Vanna,是的,你是对的,我已经有了 zip 文件的内容,只需将它们写入本地文件系统上的 zip 文件即可。我用 Cp1252 编码尝试了上面的示例;但是,我在尝试打开文件时收到了相同的错误消息“Windows 无法打开文件夹。压缩(压缩)文件夹 'C\dest.zip' 无效。”有什么想法吗?
    • 谢谢,不幸的是,我在尝试提取生成的 zip 文件时仍然遇到同样的错误。以下是我创建的 zip 文件的实际内容(用双引号括起来)以防​​万一。 " PK ÁIKšŽÌ*• * > 511257719_511257718_837P5010X12BATCH_99000061.199786.1.999.date?»Â0E...ùNvB^lQJT1¥CéÀ§äÛkR)*`O¾Ç:–sĉ ¥×Ï´m~_G4æ!
    • 谢谢万娜。我可以看到您的答案会起作用,但另一位发帖人指出,由于我有已转换为字符串的二进制数据,因此数据似乎已损坏。我已经完全重写了代码并且有一个相关的问题。在这里发布了一个新问题:stackoverflow.com/questions/45578097/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多