尝试将zip文件内容的字符串表示形式保存为Java中的文件

问题描述:

我有一个zip文件的内容,我从客户端多部分表单数据api中以字符串形式存储。尝试将zip文件内容的字符串表示形式保存为Java中的文件

我只是想将这些数据保存为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”

任何帮助,我在做什么错?

+1

zipfile是一种二进制格式,不仅仅是纯文本。使用'ZipOutputStream'来写你的数据 – Reimeus

+0

当你开始把二进制数据作为一个String对象时,你注定了。在收到表单数据时发生这种情况。 – Kayaman

要将压缩的文本表示保存为再次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(); 
+0

嗨Vanna,是的,你是正确的,我已经有了zip文件内容,只需要将它们写入我的本地文件系统上的zip文件。我用Cp1252编码尝试了上面的例子;然而,当我试图打开文件“Windows无法打开文件夹时,我收到了相同的错误信息。压缩(压缩)文件夹'C \ dest.zip'无效。”有什么想法吗? – MikeAnthony

+0

谢谢,不幸的是,当我试图提取生成的压缩文件时,仍然遇到同样的错误。下面是我创建的zip文件的实际内容(用双引号括起来)以防​​万一,这可能会有所帮助。 “PKÁIKšŽÌ*•*>511257719_511257718_837P5010X12BATCH_99000061.199786.1.999.date?°ÂÂÂÂÃÂÃÂÃÂÃÂÂÃÂÂÔ“ ËGÄŽ 511257719_511257718_837P5010X12BATCH_99000061.199786.1 .999.datPK l - “ – MikeAnthony

+0

谢谢Vanna。我可以看到你的答案会起作用,但是另一张海报指出,由于我已经将二进制数据转换为字符串,因此看起来数据已损坏。我完全重写了代码,并有一个相关的问题。在这里发布一个新的问题:https://*.com/questions/45578097/how-to-obtain-just-a-single-form-field-from-an-httpresponse-in-java-and-write-它 – MikeAnthony

您可以创建使用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();