Java 8 (en realidad FileSystem está allí desde 1.7) viene con algunas nuevas clases/métodos para lidiar con esto.Como alguien ya mencionó que JAR es básicamente archivo zip, puede utilizar
final URI jarFileUril = URI.create("jar:file:" + file.toURI().getPath());
final FileSystem fs = FileSystems.newFileSystem(jarFileUri, env);
(Ver Zip File)
continuación, puede utilizar uno de los métodos convenientes como:
fs.getPath("filename");
A continuación, puede usar Archivos clase
try (final Stream<Path> sources = Files.walk(from)) {
sources.forEach(src -> {
final Path dest = to.resolve(from.relativize(src).toString());
try {
if (Files.isDirectory(from)) {
if (Files.notExists(to)) {
log.trace("Creating directory {}", to);
Files.createDirectories(to);
}
} else {
log.trace("Extracting file {} to {}", from, to);
Files.copy(from, to, StandardCopyOption.REPLACE_EXISTING);
}
} catch (IOException e) {
throw new RuntimeException("Failed to unzip file.", e);
}
});
}
Nota: I tr IED que para desempaquetar los archivos JAR para probar
Muéstranos lo que intentó. –
¿Tienes que hacer esto programáticamente? Si no lo hace, puede cambiar el nombre de su 'Foo.jar' a' Foo.zip' y descomprimirlo normalmente. – Jeffrey
@Jeffrey Sí, lo hago – jtl999