Comment copier des fichiers en utilisant TrueZip TPath?
Question
En tant que suivi au dossier à à l'aide TrueZip .zip? comment peut-on copier le contenu d'un fichier compressé dans un autre en utilisant TrueZip? Quand j'invoque:
TPath sourceFile = new TPath("c:/foo.zip");
TPath targetFile = new TPath("c:/bar.jar");
Files.copy(sourceFile, targetFile, StandardCopyOption.COPY_ATTRIBUTES);
J'obtenir:
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)
La chose est, je sais pertinemment que c:/foo.zip
est un fichier existant, pas un répertoire.
- Pourquoi ai-je cette erreur?
- Comment suis-je censé convertir un fichier ZIP dans un fichier JAR en utilisant TPaths?
- Est-ce que TPath nécessite démontant comme TFile fait?
La solution
Répondre à ma question ... S'il vous plaît noter que je compris cela par essais et erreurs pour que je puisse me tromper sur certains points:
-
Archives sont traités comme des répertoires.
Files.copy(archive, archive)
est essentiellement tente de copier un répertoire à un autre.Files.copy(Path, Path)
est fait pour la copie d'un fichier unique, pas pour copier les répertoires récursivement. -
Maintenant que nous savons archives sont traités comme des répertoires nous suffit de copier les fichiers d'un répertoire dans un autre:
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. Oui, vous pouvez utiliser: targetFile.getFileSystem().sync(FsSyncOptions.UMOUNT);