我想编写一个程序,它将获取文件夹中存在的所有Zip文件并解压缩到目标文件夹中。 我能够编写一个程序,我可以解压缩一个zip文件,但我想解压缩该文件夹中的所有zip文件,我该怎么办?
答案 0 :(得分:1)
它不漂亮,但你明白了。
使用NIO api将文件写入指定目录
public class Unzipper {
public static void main(String [] args){
Unzipper unzipper = new Unzipper();
unzipper.unzipZipsInDirTo(Paths.get("D:/"), Paths.get("D:/unzipped"));
}
public void unzipZipsInDirTo(Path searchDir, Path unzipTo ){
final PathMatcher matcher = searchDir.getFileSystem().getPathMatcher("glob:**/*.zip");
try (final Stream<Path> stream = Files.list(searchDir)) {
stream.filter(matcher::matches)
.forEach(zipFile -> unzip(zipFile,unzipTo));
}catch (IOException e){
//handle your exception
}
}
public void unzip(Path zipFile, Path outputPath){
try (ZipInputStream zis = new ZipInputStream(Files.newInputStream(zipFile))) {
ZipEntry entry = zis.getNextEntry();
while (entry != null) {
Path newFilePath = outputPath.resolve(entry.getName());
if (entry.isDirectory()) {
Files.createDirectories(newFilePath);
} else {
if(!Files.exists(newFilePath.getParent())) {
Files.createDirectories(newFilePath.getParent());
}
try (OutputStream bos = Files.newOutputStream(outputPath.resolve(newFilePath))) {
byte[] buffer = new byte[Math.toIntExact(entry.getSize())];
int location;
while ((location = zis.read(buffer)) != -1) {
bos.write(buffer, 0, location);
}
}
}
entry = zis.getNextEntry();
}
}catch(IOException e){
throw new RuntimeException(e);
//handle your exception
}
}
}
答案 1 :(得分:0)
您可以使用Java 7 Files API
Files.list(Paths.get("/path/to/folder"))
.filter(c -> c.endsWith(".zip"))
.forEach(c -> unzip(c));