`
wen866595
  • 浏览: 267842 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Java7 Zip file system, FileVisitor

    博客分类:
  • java
阅读更多

 

Java7 的文件API可以把zip、jar文件看作是一个文件系统,访问文件系统都可以使用Path及相关的类进行。

 

下面是创建zip压缩文件的示例:

	private static void create() {
		Map<String, String> env = new HashMap<>();
		env.put("create", "true"); // 如果zip文件不存在则创建

		// 父目录的文件夹必须已创建,否则抛出异常。zip文件可以未创建
		URI uri = URI
				.create("jar:file:/H:/java/learn/java7/zipfilesystem/testzipfs.zip");

		try (FileSystem zipfs = FileSystems.newFileSystem(uri, env);) {

			Path externalPath = Paths.get("H:/java/jdk7/COPYRIGHT");

			// 创建zip文件里的目录
			Path zipDir = zipfs.getPath("abc/xyz");
			Files.createDirectories(zipDir);

			System.out.println("zipDir: " + zipDir);

			// 路径必须是已创建。
			Path contentFile = zipfs.getPath("abc/xyz", "copyRight");

			Files.copy(externalPath, contentFile);

		} catch (IOException e) {
			e.printStackTrace();
		}
	}

 

这个代码片段也展示了Java7的其他一些特性:

1、泛型的简写: Map<String, String> env = new HashMap<> ();

2、try-with-closeable:try (FileSystem zipfs = FileSystems.newFileSystem(uri, env);) {

FileSystem类实现了Closeable类,不再需要手动显示关闭。

 

 

在目前的测试中发现,如果要压缩有层次结构的文件时,如zip里有目录:abc/xyz/123.txt,需要预先建立abc/xyz目录,否则会抛出异常。 Map参数里的create属性为true只表示最后的那个文件(123.txt)不存在时创建。

这好像还不如ZipFile与ZipEntry的组合好用。

 

 

 

有了FileSystem实例后,就可以像访问本地的文件系统一样简单。下面的代码解压前面建立的zip文件里的文件到本地目录。

 

下面的代码实现了FileVisitor接口,把指定zip的path下的内容解压到saveDir的对应目录下:

	private static void walkZipPath(final String saveDir, Path path)
			throws IOException {

		FileVisitor<Path> fv = new FileVisitor<Path>() {
			@Override
			public FileVisitResult preVisitDirectory(Path dir,
					BasicFileAttributes attrs) throws IOException {
				// 创建本地目录
				new File(saveDir, dir.toString()).mkdirs();

				return FileVisitResult.CONTINUE;
			}

			@Override
			public FileVisitResult visitFile(Path file,
					BasicFileAttributes attrs) throws IOException {
				// 创建本地文件路径
				Path Localtarget = Paths.get(saveDir, file.toString());

				// 拷贝到本地文件系统
				Files.copy(file, Localtarget,
						StandardCopyOption.REPLACE_EXISTING);

				return FileVisitResult.CONTINUE;
			}

			@Override
			public FileVisitResult visitFileFailed(Path file, IOException exc)
					throws IOException {

				exc.printStackTrace();

				return FileVisitResult.TERMINATE;
			}

			@Override
			public FileVisitResult postVisitDirectory(Path dir, IOException exc)
					throws IOException {
				// 不为空表示出错
				if (exc != null) {
					exc.printStackTrace();
					return FileVisitResult.TERMINATE;
				}

				return FileVisitResult.CONTINUE;
			}
		};

		Files.walkFileTree(path, fv);
	}
 

下面的代码根据zip文件建立一个新的文件系统,并进行访问:

	private static void extractZip() {
		String uri = "H:/java/learn/java7/zipfilesystem/testzipfs.zip";
		Path path = Paths.get(uri);

		String saveDir = "H:/java/learn/java7/zipfilesystem";

		try (FileSystem fs = FileSystems.newFileSystem(path, null);) {

			for (Path path2 : fs.getRootDirectories()) {
				walkZipPath(saveDir, path2);
			}

		} catch (IOException e) {
			e.printStackTrace();
		}
	}
 

java7的新的文件API与Apache Commons IO包的功有很多相似的地方。

 

 

 

 

 

 

分享到:
评论

相关推荐

    zip4j--Java操作zip压缩文件接口

    Java操作zip压缩格式的开源项目,功能强大而且使用方便,能完全满足Java操作Zip压缩文件,官方网址为:http://www.lingala.net/zip4j/ 可以下载到jar包、源码和示例,好像没有提供API文档。 不过需要使用代理访问...

    7-Zip File Manager

    7-Zip File Manager,顾名思义,是7-Zip软件的集成管理界面,专为处理和管理ZIP文件而设计。它不仅能够快速地压缩和解压缩文件,还提供了丰富的文件管理功能,让用户在处理大量文件时更加得心应手。 首先,7-Zip ...

    java操作zip_包括加解密码

    在Java中,我们可以使用标准的`java.util.zip`库来处理基本的ZIP文件操作,但若涉及到加密和解密,就需要借助第三方库,例如`Zip4j`。本文将深入探讨如何使用Java和Zip4j库进行ZIP文件的加密与解密。 首先,`java....

    java读取zip文件

    在Java编程环境中,读取ZIP文件是一项常见的任务,特别是在处理归档数据或打包资源时。以下将详细讲解如何使用Java来实现这一功能。 首先,Java提供了`java.util.zip`包,该包包含了处理ZIP文件所需的类,如`...

    数独游戏 java.zip

    数独游戏 java.zip数独游戏 java.zip数独游戏 java.zip数独游戏 java.zip 数独游戏 java.zip数独游戏 java.zip数独游戏 java.zip数独游戏 java.zip 数独游戏 java.zip数独游戏 java.zip数独游戏 java.zip数独游戏 ...

    基于Java向zip压缩包追加文件

    在Java编程中,向现有的ZIP压缩包追加文件通常需要经过解压、修改、再压缩的步骤,因为标准的Java ZIP库(如`java.util.zip`包)并不直接支持追加到已存在的ZIP文件。本篇文章将深入探讨如何实现这个功能,主要关注...

    JAVA解压ZIP多层目录文件(需ant.jar

    ### JAVA解压ZIP多层目录文件(需ant.jar) #### 概述 本文将详细介绍一个Java方法,该方法用于解压包含多层目录结构的ZIP文件,并能够支持中文文件名。这种方法利用了Apache Ant库中的`org.apache.tools.zip....

    JAVA 上传ZIP,RAR文件并解压

    在Java编程环境中,上传并处理ZIP和RAR压缩文件是一项常见的任务,特别是在文件传输、数据存储以及备份场景下。本文将详细讲解如何实现这个功能,包括文件上传、实时进度跟踪、指定解压路径以及解压过程。 首先,让...

    zipJava.zip

    本篇将深入讲解如何使用Java实现将文件打包成ZIP的过程,主要围绕"zipJava.zip"中的核心源码文件"ZipWriter.java"展开。 首先,我们需要了解Java的`java.util.zip`包,这个包提供了处理ZIP文件的类,如`...

    File_System_Auditor2.53.rar

    《文件服务器文件监控审计软件——File_System_Auditor2.53详解》 在信息化日益发展的今天,文件服务器已经成为企业内部信息存储与分享的核心平台。然而,随着数据量的不断增长,如何确保文件的安全性、追踪文件...

    详解Java无需解压直接读取Zip文件和文件内容

    Java无需解压直接读取Zip文件和文件内容是Java语言中的一种常见操作,通过使用java.util.zip包中的ZipFile、ZipInputStream和ZipEntry类,我们可以轻松地读取Zip文件和文件内容。下面,我们将详细介绍如何使用Java...

    Java解压zip,rar,7z的jar包

    在Java中,处理.zip、.rar和.7z等压缩格式通常需要借助第三方库,因为Java标准库JDK并不直接支持这些格式。本文将详细介绍如何使用特定的jar包来实现对这三种压缩格式的操作。 首先,.zip格式是Java标准库支持的,...

    java 操作Zip文件(压缩、解压、加密).zip

    Java操作Zip文件主要涉及到对文件和目录的压缩与解压缩,以及在必要时对压缩文件进行加密处理。这里我们重点讨论使用两个库:`zip4j`和`Apache Ant`来实现这些功能。 1. **zip4j库**:`zip4j-1.3.2.jar`是一个用...

    java加密解密zip压缩包

    为了实现ZIP文件的加密,我们需要依赖第三方库,例如Apache Commons Compress或者Java 7及以上版本引入的`java.nio.file`和`java.util.zip`中的`ZipFile`和`ZipEntry`类。 对于ZIP 2.0加密,Apache Commons ...

    24点游戏,java.zip

    24点游戏,java.zip24点游戏,java.zip24点游戏,java.zip24点游戏,java.zip 24点游戏,java.zip24点游戏,java.zip24点游戏,java.zip24点游戏,java.zip 24点游戏,java.zip24点游戏,java.zip24点游戏,java.zip...

    学生住宿管理系统JAVA.zip

    学生住宿管理系统JAVA.zip学生住宿管理系统JAVA.zip学生住宿管理系统JAVA.zip学生住宿管理系统JAVA.zip学生住宿管理系统JAVA.zip学生住宿管理系统JAVA.zip学生住宿管理系统JAVA.zip学生住宿管理系统JAVA.zip学生住宿...

    aspectjweaver-1.9.6.jar报错error in opening zip file,下载后替换

    java: 读取D:\Develop\maven\repository\org\aspectj\aspectjweaver\1.9.6\aspectjweaver-1.9.6.jar时出错; error in opening zip file 提示jar出问题,找到此处,删除重新下载,但是jar依旧是损坏状态

    虎牙小游戏服务端-java.zip

    虎牙小游戏服务端_java.zip虎牙小游戏服务端_java.zip虎牙小游戏服务端_java.zip 虎牙小游戏服务端_java.zip虎牙小游戏服务端_java.zip虎牙小游戏服务端_java.zip 虎牙小游戏服务端_java.zip虎牙小游戏服务端_java....

    java将文件夹压缩成zip,解压zip压缩包

    本篇文章将详细探讨如何使用Java内置的IO流来实现文件夹的zip压缩以及zip压缩包的解压,无需依赖其他的第三方库如Apache Commons IO或JavaZip。 ### 文件夹压缩成ZIP 首先,我们需要理解如何将一个文件夹及其内容...

    Java安装.zipJava安装.zip

    java安装:Java安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装....

Global site tag (gtag.js) - Google Analytics