使用Java创建的ZIP文件在使用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

下面的代码用于压缩普通文本文件。当我使用WinRaR提取时,它会正确显示内容,但当我使用Windows资源管理器打开时,它是空的,没有列出任何文件。我使用的是Windows7企业版(64位)操作系统。知道为什么它不在Windows资源管理器中列出吗?提前谢谢

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());