Java7的Zip工具类:Zip File System Provider
来源:互联网 发布:福州广电网络 编辑:程序博客网 时间:2024/05/22 21:48
项目中涉及从银行下载Zip类型的对账文件。基于面向谷歌的编程,搜索一下,发现好多Zip工具类还是基于 java.util.zip.ZipEntry。其实Java 7的引入的Zip工具类优雅很多: Zip File System Provider。 废话少说。下面分别展示一下Zip的解压、创建、遍历。
import java.io.IOException;import java.net.URI;import java.nio.file.FileSystem;import java.nio.file.FileSystems;import java.nio.file.FileVisitResult;import java.nio.file.Files;import java.nio.file.Path;import java.nio.file.Paths;import java.nio.file.SimpleFileVisitor;import java.nio.file.StandardCopyOption;import java.nio.file.attribute.BasicFileAttributes;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;import java.util.HashMap;import java.util.Map;public class ZipUtil { /** * Returns a zip file system * * @param zipFilename to construct the file system from * @param create true if the zip file should be created * @return a zip file system */ private static FileSystem createZipFileSystem(String zipFilename, boolean create) throws IOException { // convert the filename to a URI final Path path = Paths.get(zipFilename); final URI uri = URI.create("jar:file:" + path.toUri().getPath()); final Map<String, String> env = new HashMap<>(); if (create) { env.put("create", "true"); } return FileSystems.newFileSystem(uri, env); } /** * Unzips the specified zip file to the specified destination directory. * Replaces any files in the destination, if they already exist. * * @param zipFilename the name of the zip file to extract * @param destDirname the directory to unzip to */ public static void unzip(String zipFilename, String destDirname) throws IOException { final Path destDir = Paths.get(destDirname); //if the destination doesn't exist, create it if (Files.notExists(destDir)) { System.out.println(destDir + " does not exist. Creating..."); Files.createDirectories(destDir); } try (FileSystem zipFileSystem = createZipFileSystem(zipFilename, false)) { final Path root = zipFileSystem.getPath("/"); //walk the zip file tree and copy files to the destination Files.walkFileTree(root, new SimpleFileVisitor<Path>() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { final Path destFile = Paths.get(destDir.toString(), file.toString()); System.out.printf("Extracting file %s to %s\n", file, destFile); Files.copy(file, destFile, StandardCopyOption.REPLACE_EXISTING); return FileVisitResult.CONTINUE; } @Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { final Path dirToCreate = Paths.get(destDir.toString(), dir.toString()); if (Files.notExists(dirToCreate)) { System.out.printf("Creating directory %s\n", dirToCreate); Files.createDirectory(dirToCreate); } return FileVisitResult.CONTINUE; } }); } } /** * Creates/updates a zip file. * * @param zipFilename the name of the zip to create * @param filenames list of filename to add to the zip */ public static void create(String zipFilename, String... filenames) throws IOException { try (FileSystem zipFileSystem = createZipFileSystem(zipFilename, true)) { final Path root = zipFileSystem.getPath("/"); //iterate over the files we need to add for (String filename : filenames) { final Path src = Paths.get(filename); //add a file to the zip file system if (!Files.isDirectory(src)) { final Path dest = zipFileSystem.getPath(root.toString(), src.toString()); final Path parent = dest.getParent(); if (Files.notExists(parent)) { System.out.printf("Creating directory %s\n", parent); Files.createDirectories(parent); } Files.copy(src, dest, StandardCopyOption.REPLACE_EXISTING); } else { //for directories, walk the file tree Files.walkFileTree(src, new SimpleFileVisitor<Path>() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { final Path dest = zipFileSystem.getPath(root.toString(), file.toString()); Files.copy(file, dest, StandardCopyOption.REPLACE_EXISTING); return FileVisitResult.CONTINUE; } @Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { final Path dirToCreate = zipFileSystem.getPath(root.toString(), dir.toString()); if (Files.notExists(dirToCreate)) { System.out.printf("Creating directory %s\n", dirToCreate); Files.createDirectories(dirToCreate); } return FileVisitResult.CONTINUE; } }); } } } } /** * List the contents of the specified zip file */ public static void list(String zipFilename) throws IOException { System.out.printf("Listing Archive: %s\n", zipFilename); //create the file system try (FileSystem zipFileSystem = createZipFileSystem(zipFilename, false)) { final Path root = zipFileSystem.getPath("/"); //walk the file tree and print out the directory and filenames Files.walkFileTree(root, new SimpleFileVisitor<Path>() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { print(file); return FileVisitResult.CONTINUE; } @Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { print(dir); return FileVisitResult.CONTINUE; } /** * prints out details about the specified path * such as size and modification time * @param file * @throws IOException */ private void print(Path file) throws IOException { final DateFormat df = new SimpleDateFormat("MM/dd/yyyy-HH:mm:ss"); final String modTime = df.format(new Date( Files.getLastModifiedTime(file).toMillis())); System.out.printf("%d %s %s\n", Files.size(file), modTime, file); } }); } }}
阅读全文
0 0
- Java7的Zip工具类:Zip File System Provider
- Zip操作的工具类
- dalvik.system.PathClassLoader[DexPathList[[zip file
- zip、unzip工具类
- Zip解压工具类
- java zip工具类
- java zip 工具类
- java zip 工具类
- ZIP工具类
- zip工具类
- Java zip工具类
- java zip工具类
- zip打包工具类
- ZIP工具类
- Java实现的ZIP解压缩工具类
- 基于java原生的zip工具类
- Java Zip操作的工具类
- zip与流+JAVA7+Files
- 【BZOJ1010】玩具装箱
- MATLAB实现RSA算法
- Junit简单使用方法
- Presto-[7]-Presto Security
- 蒂高卫浴-数夫F19家具ERP项目是送给企业10周年庆最好的礼物
- Java7的Zip工具类:Zip File System Provider
- Linux mysql安装
- typedef和#define 介绍和使用
- Linux下安装比特币矿池p2pool笔记
- Javap框架
- 高精度加法
- iPhoneX的启动图如何配置
- 驼峰命名法与数据库下划线命名的字符串快速转化,方便操作数据
- synchronizing script resources with Tern server