Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用TrueZip TPath复制文件?_Java_Truezip - Fatal编程技术网

Java 如何使用TrueZip TPath复制文件?

Java 如何使用TrueZip TPath复制文件?,java,truezip,Java,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.z

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

  • 为什么我会犯这个错误
  • 我应该如何使用Tpath将ZIP文件转换为JAR文件
  • TPath是否需要像TFile一样卸载

  • 回答我自己的问题。。。请注意,我通过反复试验得出了这一结论,因此我可能在以下几点上出错:

  • 档案被视为目录<代码>文件。复制(存档,存档)实际上是试图将一个目录复制到另一个目录<代码>文件。复制(路径,路径)用于复制单个文件,而不是递归复制目录

  • 既然我们知道归档文件被视为目录,我们只需将文件从一个目录复制到另一个目录:

  • Files.walkFileTree(源文件,新的SimpleFileVisitor()
    {
    @凌驾
    公共文件VisitResult visitFile(路径文件,基本文件属性属性属性)引发IOException
    {
    Files.copy(file,targetFile.resolve(sourceFile.relativize(file)),
    标准复制选项。复制属性);
    返回super.visitFile(文件,attrs);
    }
    });
    
    三,。是的,您可以使用:
    targetFile.getFileSystem().sync(FsSyncOptions.UMOUNT)

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