2016-02-11 57 views
0

我想通過安裝了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'或其他。 –

回答

0

這並不直接回答你的問題,但你並不需要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; 
      } 
     }); 
    } 
}