java - 文件压缩后我丢失了文件扩展名

标签 java java-8 file-comparison zipoutputstream

我正在尝试使用 ZipOutPutStream 压缩我的文件。我尝试了下面的代码并获得了包含该文件的压缩文件夹。但是当我使用 7Zip 提取文件夹时,文件扩展名丢失。 另外,我无法通过 Windows 中提供的正常提取选项提取该文件夹。

下面是我尝试使用 Java -8 的代码

公共(public)无效压缩(字符串压缩,字符串原始){

    Path pCompressed = null;
    try {
        pCompressed = Files.createFile(Paths.get(compressed));

    try (ZipOutputStream zos = new ZipOutputStream(Files.newOutputStream(pCompressed))) {
        Path pRaw = Paths.get(raw);
        Files.walk(pRaw).filter(path -> !Files.isDirectory(path)).forEach(path -> {
              ZipEntry zipEntry = new ZipEntry(pRaw.relativize(path).toString());
              try {
                  zos.putNextEntry(zipEntry);
                  Files.copy(path, zos);
                  zos.closeEntry();
            } catch (IOException e) {
               logger.error("Exception while copying file to compressed Directory: "+e);
            }
          });
    }
   catch(IOException ioe) {
       logger.error("Exception while compressing the output file: "+ioe);
   }
    }
    catch (IOException e1) {
        logger.error("Exception While Path initialization for compressing the file");
    }
}

预期:提取后 someFolder/MyFile.csv

最佳答案

我刚刚尝试过这段代码,当我向它提供 compressed = "out.zip"raw = "testdir" 时,它对我来说工作得很好。它生成了一个包含 testdir 内容的 zip 文件。然后我能够使用 7Zip 和内置的 Windows 提取来提取此文件,并且文件全部存在且正确。

我的猜测是您没有为输出文件指定 .zip 扩展名,或者 Windows 在文件夹 View 中隐藏了该扩展名。 (我认为它默认这样做。)

关于java - 文件压缩后我丢失了文件扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57359842/

相关文章:

java - 从 Java FX 中的给定日期获取周数

python - 比较两个文件中的行,如果相等则删除

python - filecmp.cmp() 忽略不同的 os.stat() 签名?

java - maven > 混合 scala/Java 项目 > scala : error: value toScan is not a member of object org. apache.hadoop.hbase.protobuf.ProtobufUtil

java - spring工具套件创建可运行的jar错误查找配置文件

Java初始化抽象类

linux - 比较两个文件并获取Linux中第三个文件的位置

java - 哪个Java库提供base64编码/解码?

Java - (匿名子类)在对象实例构造期间覆盖方法

java - 具有未经检查的异常的选项