Domanda

Come un follow-up a La conversione .tar.gz file .zip utilizzando TrueZip? come si fa a copiare il contenuto di un file compresso in un altro utilizzando TrueZip?Quando invoco:

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

Ottengo:

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)

Il fatto è che io so per certo che c:/foo.zip è un file esistente, non è una directory.

  1. Perché ricevo questo errore?
  2. Come faccio a convertire un file ZIP un file JAR utilizzando TPaths?
  3. Non TPath richiedono lo smontaggio di come TFile fa?
È stato utile?

Soluzione

Rispondendo alla mia domanda...Si prega di notare che ho capito questo da prova ed errore, così ho potuto essere sbagliato su alcuni punti:

  1. Gli archivi sono trattati come directory. Files.copy(archive, archive) è essenzialmente cercando di copiare una directory ad un'altra. Files.copy(Path, Path) è fatto per copiare un singolo file, non per copiare le directory in modo ricorsivo.

  2. Ora che sappiamo archivi sono trattati come le directory, abbiamo semplicemente copiare i file da una directory in un'altra:

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.Sì, è possibile utilizzare: targetFile.getFileSystem().sync(FsSyncOptions.UMOUNT);

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top