truezip tpathを使用してファイルをコピーする方法は?
質問
フォローアップとして 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
ディレクトリではなく、既存のファイルです。
- なぜこのエラーが発生しているのですか?
- ZIPファイルをTPathsを使用してJARファイルに変換するにはどうすればよいですか?
- tpathは、tfileのようにアンマンティングを解除する必要がありますか?
解決
私自身の質問に答える...私は試行錯誤によってこれを理解したので、私はいくつかのポイントで間違っている可能性があることに注意してください:
アーカイブはディレクトリとして扱われます。
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);
所属していません StackOverflow