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,但是是空的。
任何建议将有所帮助。
答
这并不直接回答你的问题,但你并不需要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;
}
});
}
}
你意识到你正在执行一个外部应用程序,这意味着你必须使用正确的Windows路径? 'C:\ Folder.zip'不是一个路径,它是一个看起来像一条路径的奇怪的字符串,并且zip不会知道它是什么。 'C:\ Folder.zip',然而,是一个路径。 –
但我使用的是cygwin,如果它不采取cmd作为linux –
cygwin也不使用dos风格的路径。它会是'/ cygdrive/c/Folder'或其他。 –