Это можно попробовать следующим образом:
Path path = Paths.get("C:\\Users\\... .zip");
final URI uri = URI.create("jar:" + path.toUri().toString());
Map<String, Object> env = new HashMap<>();
try (FileSystem zipfs = FileSystems.newFileSystem(uri, env)) {
Path root = zipfs.getPath("/");
final Path targetDir = Paths.get("C:/Users/Joop/limbo");
Files.createDirectories(targetDir);
final AtomicInteger fno = new AtomicInteger();
Files.walkFileTree(root, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
System.out.println("Failed: " + file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
String name = fno.incrementAndGet() + "-"
+ file.getFileName().toString().replaceAll("[^-.\\w]+", "");
Path targetFile = targetDir.resolve(name);
System.out.println("+ " + file + " - " + targetFile);
Files.copy(file, targetFile, StandardCopyOption.REPLACE_EXISTING);
return FileVisitResult.CONTINUE;
}
});
}
URI, который я взял не из файла, а из File.toURI, чтобы избавиться от обратной косой черты в Windows.
имя файла может быть повреждено или иметь неправильную кодировку, следовательно, преобразование имени файла.
Я не уверен, подойдет ли файловая система zip.