gpt4 book ai didi

java - 如何使用TrueZip TPath复制文件?

转载 作者:行者123 更新时间:2023-11-30 04:53:28 24 4
gpt4 key购买 nike

作为 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 是一个现有文件,而不是目录。

  1. 为什么我会收到此错误?
  2. 我该如何使用 TPaths 将 ZIP 文件转换为 JAR 文件?
  3. TPath 是否需要像 TFile 一样卸载?

最佳答案

回答我自己的问题...请注意,我通过反复试验得出了这个结论,因此我在某些观点上可能是错误的:

  1. 存档被视为目录。 Files.copy(archive, archive) 本质上是尝试将一个目录复制到另一个目录。 Files.copy(Path, Path) 用于复制单个文件,而不是递归复制目录。

  2. 现在我们知道存档被视为目录,我们只需将文件从一个目录复制到另一个目录即可:

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);

关于java - 如何使用TrueZip TPath复制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9338190/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com