zip命令不能按预期在java代码中工作

问题描述:

我想通过安装了cygwin的Windows机器上的java程序发出zip命令。我给下面cmd在Java代码:zip命令不能按预期在java代码中工作

拉链-r C:/Folder.zip C:/文件夹

它给了我错误 - 压缩错误:压缩I/O错误:没有这样的文件或目录,临时文件失败(C:/ zibIIBYC)

但C:/ Folder存在。我不知道什么是C:/ zibIIBYC?

当我尝试下面CMD:

拉链-r C:/cygwin64/Folder.zip C:/文件夹

然后Folder.zip用C创建:/ cygwin64,但是是空的。

任何建议将有所帮助。

+0

你意识到你正在执行一个外部应用程序,这意味着你必须使用正确的Windows路径? 'C:\ Folder.zip'不是一个路径,它是一个看起来像一条路径的奇怪的字符串,并且zip不会知道它是什么。 'C:\ Folder.zip',然而,是一个路径。 –

+0

但我使用的是cygwin,如果它不采取cmd作为linux –

+0

cygwin也不使用dos风格的路径。它会是'/ cygdrive/c/Folder'或其他。 –

这并不直接回答你的问题,但你并不需要Cygwin的,或任何外部的过程,来压缩目录:

public void zip(Path zipFile, 
       Path directoryToZip) 
throws IOException { 
    try (final ZipOutputStream zip = new ZipOutputStream(
      new BufferedOutputStream(Files.newOutputStream(zipFile)))) { 

     Files.walkFileTree(directoryToZip, new SimpleFileVisitor<Path>() { 
      @Override 
      public FileVisitResult visitFile(Path file, 
              BasicFileAttributes attr) 
      throws IOException { 
       ZipEntry entry = new ZipEntry(
        directoryToZip.relativize(file).toString()); 
       entry.setSize(attr.size()); 
       entry.setTime(attr.lastModifiedTime().toMillis()); 

       zip.putNextEntry(entry); 
       Files.copy(file, zip); 
       zip.closeEntry(); 

       return FileVisitResult.CONTINUE; 
      } 
     }); 
    } 
}