尝试将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”
任何帮助,我在做什么错?
要将压缩的文本表示保存为再次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'无效。”有什么想法吗? – MikeAnthony
谢谢,不幸的是,当我试图提取生成的压缩文件时,仍然遇到同样的错误。下面是我创建的zip文件的实际内容(用双引号括起来)以防万一,这可能会有所帮助。 “PKÁIKšŽÌ*•*>511257719_511257718_837P5010X12BATCH_99000061.199786.1.999.date?°ÂÂÂÂÃÂÃÂÃÂÃÂÂÃÂÂÔ“ ËGÄŽ
谢谢Vanna。我可以看到你的答案会起作用,但是另一张海报指出,由于我已经将二进制数据转换为字符串,因此看起来数据已损坏。我完全重写了代码,并有一个相关的问题。在这里发布一个新的问题:https://stackoverflow.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();
zipfile是一种二进制格式,不仅仅是纯文本。使用'ZipOutputStream'来写你的数据 – Reimeus
当你开始把二进制数据作为一个String对象时,你注定了。在收到表单数据时发生这种情况。 – Kayaman