使用Java创建的ZIP文件在使用Windows资源管理器打开时显示为空
下面的代码用于压缩普通文本文件。当我使用WinRaR提取时,它会正确显示内容,但当我使用Windows资源管理器打开时,它是空的,没有列出任何文件。我使用的是Windows7企业版(64位)操作系统。知道为什么它不在Windows资源管理器中列出吗?提前谢谢使用Java创建的ZIP文件在使用Windows资源管理器打开时显示为空,java,zipfile,Java,Zipfile,下面的代码用于压缩普通文本文件。当我使用WinRaR提取时,它会正确显示内容,但当我使用Windows资源管理器打开时,它是空的,没有列出任何文件。我使用的是Windows7企业版(64位)操作系统。知道为什么它不在Windows资源管理器中列出吗?提前谢谢 File file = new File("F:\\sample.txt"); byte[] buf = new byte[1024]; String outFilename = "F:\\zipped_sample.zip
File file = new File("F:\\sample.txt");
byte[] buf = new byte[1024];
String outFilename = "F:\\zipped_sample.zip";
try {
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(outFilename));
FileInputStream in = new FileInputStream(file);
out.putNextEntry(new ZipEntry(file.toString()));
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
out.flush();
}
out.closeEntry();
out.close();
in.close();
} catch (Exception e) {
// log exception here
}
ZipEntry构造函数取名称,但您通过执行file.toString()为其提供路径;尝试:
这将传递文件名。我遇到了相同的问题,zip文件未解压缩,显示为空。问题出现在zip文件中的文件夹名中。如果文件夹名称由
>组成,或者此代码应按原样工作,则Windows资源管理器应显示zip中包含“F:”条目和“sample.txt”条目。将异常正确记录在catch
中,以查看此代码是否在您的计算机上正常完成。您应该在finally块中关闭()。另外,如果这是Java 7,请使用新的zip文件系统,这将使您的工作更轻松。@OlegEstekhin代码正常完成,我看不到任何错误/异常。但当我尝试右键单击->全部提取时,显示错误“Windows无法完成提取。压缩(压缩)文件夹无效”。我不知道为什么只有windows资源管理器才会失败。请用7-Zip或其他专用的Zip文件软件打开它。似乎Windows资源管理器无法处理名为“F:”的条目,无论是在列出内容时,还是在提取内容时,都是如此,因为“F:”在Windows上不是有效的文件名。@OlegEstekhin,是的,您是正确的,我刚刚将代码更改为out.putnextry(新的ZipEntry(file.getName());而不是out.putnextery(新的ZipEntry(file.toString());现在Windows资源管理器可以显示内容了。
New ZipEntry(file.getName());