这篇文章主要介绍了如何在Java中利用zip实现压缩和解压缩,亿速云小编觉得不错,现在分享给大家,也给大家做个参考,一起跟随亿速云小编来看看吧!
Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序。
zip压缩
待压缩文件目录结构:
每个zip文件项都要对应一个ZipEntry,然后通过ZipOutputStream的putNextEntry方法开始写入一个新的zip文件项,将文件数据发送到zip输出流中,完成后再调用closeEntry方法。
@Test
public void testCompressByZip() {
try (
//指定压缩完成后zip文件的存储路径
ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream("F:\\myFavorites.zip"))
)
{
//待压缩文件/目录所在的目录
File fileFolder = new File("F:\\我的收藏");
//获取目录下的所有文件
File[] files = fileFolder.listFiles();
ZipEntry zipEntry;
byte[] byteArray;
int len;
//遍历目录下的所有文件/目录,并将它们添加到压缩文件中
for (File file : files) {
//一个ZipEntry对应压缩文件中的一项
zipEntry = new ZipEntry(file.getName());
zipOutputStream.putNextEntry(zipEntry);
try (FileInputStream in = new FileInputStream(file)) {
byteArray = new byte[1024];
while ((len = in.read(byteArray)) != -1) {
zipOutputStream.write(byteArray, 0, len);
}
} catch (IOException ex) {
ex.printStackTrace();
}
zipOutputStream.closeEntry();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
压缩结果:
遍历zip文件中的所有项,并获取对应项的输入流,然后通过FileOutputStream输出到指定目录中。
@Test
public void testDecompressByZip() {
try (
//指定需要解压缩的zip文件
ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream("F:\\myFavorites.zip"))
)
{
ZipEntry zipEntry;
byte[] byteArray;
int len;
//遍历zip文件中的所有项,并逐个解压到指定的目录中
while ((zipEntry = zipInputStream.getNextEntry()) != null) {
try (FileOutputStream fileOutputStream = new FileOutputStream("F:\\我的解压目录\\" + zipEntry.getName())) {
byteArray = new byte[1024];
while ((len = zipInputStream.read(byteArray)) != -1) {
fileOutputStream.write(byteArray, 0, len);
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
解压缩结果:
建立一个文件系统,包含zip文件中的所有项。
遍历zip文件中的所有项,通过文件访问器SimpleFileVisitor将每个项复制到指定目录中。
@Test
public void testDecompressByZip2(){
try {
//将压缩文件作为一个文件系统访问
FileSystem fileSystem = FileSystems.newFileSystem(Paths.get("F:\\myFavorites.zip"), null);
//遍历压缩文件中的内容,并使用文件访问器访问所有内容
Files.walkFileTree(fileSystem.getPath("/"), new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
System.out.println("访问目录中文件时调用");
//将文件解压到指定目录
Files.copy(file, new FileOutputStream("F:\\我的解压目录\\" + file.getName(file.getNameCount() - 1)));
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
System.out.println("访问目录中文件之前调用");
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
System.out.println("访问目录中文件失败时调用");
return FileVisitResult.SKIP_SUBTREE;
}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
System.out.println("访问目录中的文件及其所有后代之后调用");
return FileVisitResult.CONTINUE;
}
});
} catch (IOException ex) {
ex.printStackTrace();
}
}
以上就是亿速云小编为大家收集整理的如何在Java中利用zip实现压缩和解压缩,如何觉得亿速云网站的内容还不错,欢迎将亿速云网站推荐给身边好友。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。