Frage

Als Follow-up zu Konvertieren Sie .tar.gz Datei in .zip mit Truezip? Wie kopiert man den Inhalt einer komprimierten Datei mit Truezip in eine andere? Wenn ich aufrufe:

TPath sourceFile = new TPath("c:/foo.zip");
TPath targetFile = new TPath("c:/bar.jar");
Files.copy(sourceFile, targetFile, StandardCopyOption.COPY_ATTRIBUTES);

Ich bekomme:

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)

Die Sache ist, ich weiß, dass eine Tatsache, dass c:/foo.zip ist eine vorhandene Datei, kein Verzeichnis.

  1. Warum bekomme ich diesen Fehler?
  2. Wie soll ich eine ZIP -Datei mit Tads in eine JAR -Datei konvertieren?
  3. Benötigt TPADS das Unkombarieren wie tfile?
War es hilfreich?

Lösung

Beantwortung meiner eigenen Frage ... Bitte beachten Sie, dass ich dies durch Versuch und Irrtum herausgefunden habe, damit ich mich in einigen Punkten irren könnte:

  1. Archive werden als Verzeichnisse behandelt. Files.copy(archive, archive) Versucht im Wesentlichen, ein Verzeichnis in ein anderes zu kopieren. Files.copy(Path, Path) wird zum Kopieren einer einzelnen Datei hergestellt, nicht für das Kopieren von Verzeichnissen rekursiv.

  2. Nachdem wir wissen, dass Archive als Verzeichnisse behandelt werden, kopieren wir einfach Dateien aus einem Verzeichnis in ein anderes:

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. Ja, Sie können verwenden: targetFile.getFileSystem().sync(FsSyncOptions.UMOUNT);

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top