1

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. TPathを使用してZIPファイルをJARファイルに変換するにはどうすればよいですか?
  3. TPathはTFileのようにアンマウントする必要がありますか?
4

1 に答える 1

2

私自身の質問に答える...私は試行錯誤によってこれを理解したので、いくつかの点で間違っている可能性があることに注意してください:

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

于 2012-02-18T03:42:53.323 に答える