`
wen866595
  • 浏览: 269005 次
  • 性别: 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包的功有很多相似的地方。

 

 

 

 

 

 

分享到:
评论

相关推荐

    java读取zip文件

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

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

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

    java压缩zip文件解决中文乱码问题

    在Java编程中,处理文件压缩和解压是常见的任务,特别是使用ZIP格式。然而,当涉及到包含中文字符的文件或目录时,可能会遇到乱码问题。这个问题主要源于字符编码的不一致,通常需要正确设置字符集来确保中文字符在...

    File_System_Auditor2.53+keygen已测08R2+2012R2

    《Windows文件系统审计工具——File_System_Auditor2.53深度解析》 在IT管理领域,特别是企业网络环境中,确保数据安全与合规性至关重要。File_System_Auditor是一款专门针对Windows文件系统的审计工具,其最新版本...

    zipJava.zip

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

    JAVA 上传ZIP,RAR文件并解压

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

    File_System_Auditor2.53.rar

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

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

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

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

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

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

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

    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压缩包

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

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

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

    FileSystemAuditor2.53 Crack sup2008R2A.zip

    File System Auditor簡介 File System Auditor提供Windows檔案伺服器,稽核、 報表與警示,提供檔案與目錄存取紀錄,存取時間與那台 伺服器,File System Auditor提供系統層級的智慧型稽核 ,收集所有的動作與單一...

    使用java处理zip文件

    在Java 7及以上版本,可以使用try-with-resources语句自动关闭流。 总的来说,Java提供的`java.util.zip`包使得处理ZIP文件变得简单易行。无论你是要解压文件、创建新的ZIP文件,还是在现有ZIP文件中添加或删除条目...

    Java安装.zipJava安装.zip

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

    使用java代码替换zip内的文件.docx

    在Java编程中,有时我们需要对已经存在的ZIP文件进行操作,比如替换其中的某个文件,而无需将整个ZIP文件解压后再重新压缩。这样的需求在处理大量数据或优化性能时尤其重要,因为它避免了创建临时文件和多次I/O操作...

    java 生成zip压缩文件

    在Java编程语言中,生成ZIP压缩文件是一项常见的任务,它涉及到文件操作和数据流的处理。这个过程可以用于归档多个文件或者整个目录结构,便于存储或传输。下面我们将详细探讨如何使用Java来生成ZIP压缩文件,以及...

    基于java的开发源码-iCHAT聊天室基于Java.zip

    基于java的开发源码-iCHAT聊天室基于Java.zip 基于java的开发源码-iCHAT聊天室基于Java.zip 基于java的开发源码-iCHAT聊天室基于Java.zip 基于java的开发源码-iCHAT聊天室基于Java.zip 基于java的开发源码-iCHAT聊天...

    java实现zip压缩文件

    ### Java 实现ZIP压缩文件详解 #### 一、概述 在日常开发工作中,对文件进行压缩处理是一项常见的需求。本文将详细介绍如何使用Java语言来实现文件或文件夹的ZIP格式压缩。通过本教程,读者可以了解到Java标准库...

Global site tag (gtag.js) - Google Analytics