Come copiare i file utilizzando TrueZip TPath?
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.
- Perché ricevo questo errore?
- Come faccio a convertire un file ZIP un file JAR utilizzando TPaths?
- Non TPath richiedono lo smontaggio di come TFile fa?
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:
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.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);