質問

フォローアップとして truezipを使用して.tar.gzファイルを.zipに変換しますか? 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. ZIPファイルをTPathsを使用して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);

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top