在Java中实现Zip文件的压缩与解压缩( 二 )

<>();try {Files.walkFileTree(folder, new FileVisitor() {@Overridepublic FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {if (!dir.equals(folder)) {// 开始遍历目录String folder = dir.getFileName().toString();path.addLast(folder);// 写入目录ZipEntry zipEntry = new ZipEntry(path.stream().collect(Collectors.joining("/", "", "/")));try {zipOutputStream.putNextEntry(zipEntry);zipOutputStream.flush();} catch (IOException e) {throw new RuntimeException(e);}}return FileVisitResult.CONTINUE;}@Overridepublic FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {// 开始遍历文件try (InputStream inputStream = Files.newInputStream(file)) {// 创建一个压缩项 , 指定名称String fileName = path.size() > 0? path.stream().collect(Collectors.joining("/", "", "")) + "/" + file.getFileName().toString(): file.getFileName().toString();ZipEntry zipEntry = new ZipEntry(fileName);// 添加到压缩流zipOutputStream.putNextEntry(zipEntry);// 写入数据int len = 0;byte[] buffer = new byte[1024 * 10];while ((len = inputStream.read(buffer)) > 0) {zipOutputStream.write(buffer, 0, len);}zipOutputStream.flush();} catch (IOException e) {throw new RuntimeException(e);}return FileVisitResult.CONTINUE;}@Overridepublic FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {return FileVisitResult.CONTINUE;}@Overridepublic FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {// 结束遍历目录if (!path.isEmpty()) {path.removeLast();}return FileVisitResult.CONTINUE;}});zipOutputStream.closeEntry();} finally {zipOutputStream.close();outputStream.close();} }}【在Java中实现Zip文件的压缩与解压缩】原文:


推荐阅读