在Java中可以使用ZipOutputStream和ZipInputStream来实现zip的压缩和解压缩操作,另外使用FileSystem也可以用来实现zip的解压缩,下面将介绍这几种方式,直接上代码。
zip压缩
待压缩文件目录结构:
每个zip文件项都要对应一个ZipEntry,然后通过ZipOutputStream的putNextEntry方法开始写入一个新的zip文件项,将文件数据发送到zip输出流中,完成后再调用closeEntry方法。
@Testpublic 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输出到指定目录中。
@Testpublic 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:\\我的.........