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压缩文件,官方网址为:http://www.lingala.net/zip4j/ 可以下载到jar包、源码和示例,好像没有提供API文档。 不过需要使用代理访问...
7-Zip File Manager,顾名思义,是7-Zip软件的集成管理界面,专为处理和管理ZIP文件而设计。它不仅能够快速地压缩和解压缩文件,还提供了丰富的文件管理功能,让用户在处理大量文件时更加得心应手。 首先,7-Zip ...
在Java中,我们可以使用标准的`java.util.zip`库来处理基本的ZIP文件操作,但若涉及到加密和解密,就需要借助第三方库,例如`Zip4j`。本文将深入探讨如何使用Java和Zip4j库进行ZIP文件的加密与解密。 首先,`java....
在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.util.zip`包)并不直接支持追加到已存在的ZIP文件。本篇文章将深入探讨如何实现这个功能,主要关注...
### JAVA解压ZIP多层目录文件(需ant.jar) #### 概述 本文将详细介绍一个Java方法,该方法用于解压包含多层目录结构的ZIP文件,并能够支持中文文件名。这种方法利用了Apache Ant库中的`org.apache.tools.zip....
在Java编程环境中,上传并处理ZIP和RAR压缩文件是一项常见的任务,特别是在文件传输、数据存储以及备份场景下。本文将详细讲解如何实现这个功能,包括文件上传、实时进度跟踪、指定解压路径以及解压过程。 首先,让...
本篇将深入讲解如何使用Java实现将文件打包成ZIP的过程,主要围绕"zipJava.zip"中的核心源码文件"ZipWriter.java"展开。 首先,我们需要了解Java的`java.util.zip`包,这个包提供了处理ZIP文件的类,如`...
《文件服务器文件监控审计软件——File_System_Auditor2.53详解》 在信息化日益发展的今天,文件服务器已经成为企业内部信息存储与分享的核心平台。然而,随着数据量的不断增长,如何确保文件的安全性、追踪文件...
Java无需解压直接读取Zip文件和文件内容是Java语言中的一种常见操作,通过使用java.util.zip包中的ZipFile、ZipInputStream和ZipEntry类,我们可以轻松地读取Zip文件和文件内容。下面,我们将详细介绍如何使用Java...
在Java中,处理.zip、.rar和.7z等压缩格式通常需要借助第三方库,因为Java标准库JDK并不直接支持这些格式。本文将详细介绍如何使用特定的jar包来实现对这三种压缩格式的操作。 首先,.zip格式是Java标准库支持的,...
Java操作Zip文件主要涉及到对文件和目录的压缩与解压缩,以及在必要时对压缩文件进行加密处理。这里我们重点讨论使用两个库:`zip4j`和`Apache Ant`来实现这些功能。 1. **zip4j库**:`zip4j-1.3.2.jar`是一个用...
为了实现ZIP文件的加密,我们需要依赖第三方库,例如Apache Commons Compress或者Java 7及以上版本引入的`java.nio.file`和`java.util.zip`中的`ZipFile`和`ZipEntry`类。 对于ZIP 2.0加密,Apache Commons ...
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: 读取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....
本篇文章将详细探讨如何使用Java内置的IO流来实现文件夹的zip压缩以及zip压缩包的解压,无需依赖其他的第三方库如Apache Commons IO或JavaZip。 ### 文件夹压缩成ZIP 首先,我们需要理解如何将一个文件夹及其内容...
java安装:Java安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装....