作为Convert .tar.gz file to .zip using TrueZip?的后续工作,如何使用TrueZip将一个压缩文件的内容复制到另一个压缩文件中?当我调用时:
TPath sourceFile = new TPath("c:/foo.zip");
TPath targetFile = new TPath("c:/bar.jar");
Files.copy(sourceFile, targetFile, StandardCopyOption.COPY_ATTRIBUTES);
我明白了:
java.io.FileNotFoundException: C:\foo.zip (expected FILE - is DIRECTORY)
at de.schlichtherle.truezip.nio.file.TFileSystemProvider.copy(TFileSystemProvider.java:397)
at de.schlichtherle.truezip.nio.file.TFileSystemProvider.copy(TFileSystemProvider.java:364)
at java.nio.file.Files.copy(Files.java:1219)
问题是,我知道c:/foo.zip
是现有文件,而不是目录。
答案 0 :(得分:2)
回答我自己的问题......请注意我通过反复试验弄清楚了这一点,所以我在某些方面可能出错:
档案被视为目录。 Files.copy(archive, archive)
本质上是试图将一个目录复制到另一个目录。 Files.copy(Path, Path)
用于复制单个文件,而不是用于递归复制目录。
既然我们知道档案被视为目录,我们只需将文件从一个目录复制到另一个目录:
Files.walkFileTree(sourceFile, new SimpleFileVisitor<Path>()
{
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException
{
Files.copy(file, targetFile.resolve(sourceFile.relativize(file)),
StandardCopyOption.COPY_ATTRIBUTES);
return super.visitFile(file, attrs);
}
});
3。是的,您可以使用:targetFile.getFileSystem().sync(FsSyncOptions.UMOUNT);