Java中zip的压缩和解压缩的实现代码

这篇文章主要介绍了Java中zip的压缩和解压缩的实现代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

在Java中可以使用ZipOutputStream和ZipInputStream来实现zip的压缩和解压缩操作,另外使用FileSystem也可以用来实现zip的解压缩,下面将介绍这几种方式,直接上代码

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

遍历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(); } }

解压缩结果:

使用FileSystem解压缩

建立一个文件系统,包含zip文件中的所有项。

遍历zip文件中的所有项,通过文件访问器SimpleFileVisitor将每个项复制到指定目录中。

@Test public void testDecompressByZip2(){ try { //将压缩文件作为一个文件系统访问 FileSystem fileSystem = FileSystems.newFileSystem(Paths.get("F:\myFavorites.zip"), null); //遍历压缩文件中的内容,并使用文件访问器访问所有内容 Files.walkfiletree(fileSystem.getPath("/"), new SimpleFileVisitor() { @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的压缩和解压缩的实现代码文章就介绍到这了,更多相关java zip压缩和解压缩内容搜索编程之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程之家!

相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...