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.util.zip`包)并不直接支持追加到已存在的ZIP文件。本篇文章将深入探讨如何实现这个功能,主要关注...
在Java编程中,处理文件压缩和解压是常见的任务,特别是使用ZIP格式。然而,当涉及到包含中文字符的文件或目录时,可能会遇到乱码问题。这个问题主要源于字符编码的不一致,通常需要正确设置字符集来确保中文字符在...
《Windows文件系统审计工具——File_System_Auditor2.53深度解析》 在IT管理领域,特别是企业网络环境中,确保数据安全与合规性至关重要。File_System_Auditor是一款专门针对Windows文件系统的审计工具,其最新版本...
本篇将深入讲解如何使用Java实现将文件打包成ZIP的过程,主要围绕"zipJava.zip"中的核心源码文件"ZipWriter.java"展开。 首先,我们需要了解Java的`java.util.zip`包,这个包提供了处理ZIP文件的类,如`...
在Java中,处理.zip、.rar和.7z等压缩格式通常需要借助第三方库,因为Java标准库JDK并不直接支持这些格式。本文将详细介绍如何使用特定的jar包来实现对这三种压缩格式的操作。 首先,.zip格式是Java标准库支持的,...
为了实现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....
在Java 7及以上版本,可以使用try-with-resources语句自动关闭流。 总的来说,Java提供的`java.util.zip`包使得处理ZIP文件变得简单易行。无论你是要解压文件、创建新的ZIP文件,还是在现有ZIP文件中添加或删除条目...
《深入理解Zip File格式与jazzlib库》 在信息技术领域,数据压缩是常见的操作,其中Zip文件格式是最广泛使用的压缩格式之一。Zip文件能够将多个文件或目录打包成一个单一的可移动文件,便于存储、传输和分享。本文...
java安装:Java安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装.zipJava安装....
在Java编程中,有时我们需要对已经存在的ZIP文件进行操作,比如替换其中的某个文件,而无需将整个ZIP文件解压后再重新压缩。这样的需求在处理大量数据或优化性能时尤其重要,因为它避免了创建临时文件和多次I/O操作...
Java Zip是Java编程语言中处理压缩文件的一种技术,主要用于创建、读取和更新ZIP格式的文件。ZIP是一种广泛使用的文件存档格式,它允许将多个文件和目录打包成一个单一的压缩文件,便于存储和传输。在Java中,我们...
基于java的开发源码-CKFinder 文件管理器 for java.zip 基于java的开发源码-CKFinder 文件管理器 for java.zip 基于java的开发源码-CKFinder 文件管理器 for java.zip 基于java的开发源码-CKFinder 文件管理器 for ...
基于java的开发源码-iCHAT聊天室基于Java.zip 基于java的开发源码-iCHAT聊天室基于Java.zip 基于java的开发源码-iCHAT聊天室基于Java.zip 基于java的开发源码-iCHAT聊天室基于Java.zip 基于java的开发源码-iCHAT聊天...
基于java的开发源码-CKFinder文件管理器for Java.zip 基于java的开发源码-CKFinder文件管理器for Java.zip 基于java的开发源码-CKFinder文件管理器for Java.zip 基于java的开发源码-CKFinder文件管理器for Java.zip ...
Java 读取ZIP文件是Java开发中常见的任务,主要用于处理归档数据,如打包和压缩文件。在Java中,我们可以使用内置的`java.util.zip`包来读取和操作ZIP文件。下面将详细介绍如何使用Java读取ZIP文件,并提供相关的...
### Java 实现ZIP压缩文件详解 #### 一、概述 在日常开发工作中,对文件进行压缩处理是一项常见的需求。本文将详细介绍如何使用Java语言来实现文件或文件夹的ZIP格式压缩。通过本教程,读者可以了解到Java标准库...
大创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...
java毕设java毕设.zipjava毕设.zipjava毕设.zipjava毕设.zipjava毕设.zipjava毕设.zipjava毕设.zipjava毕设.zipjava毕设.zipjava毕设.zipjava毕设.zipjava毕设.zipjava毕设.zipjava毕设.zipjava毕设.zipjava毕设.zip...
这里我们关注的是`JAVA FileOperate.zip`这个主题,它涉及到Java中的文件操作以及如何处理ZIP压缩格式。在Java中,我们可以使用内置的`java.io`和`java.util.zip`包来实现对文件的创建、读取、写入和压缩解压等操作...