Java如何实现压缩文件与解压缩zip文件

这篇文章主要介绍了Java如何实现压缩文件与解压缩zip文件问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Java压缩文件与解压缩zip文件

在日常的使用中经常会使用到像WinRAR或WinZIP这样的压缩文件,通过这些软件可以把一个很大的文件进行压缩以方便传输。

在JAVA中 为了减少传输时的数据量也提供了专门的压缩流,可以将文件或文件夹压缩成ZIP、JAR、GZIP等文件的格式。

ZIP是一种较为常见的压缩形式,在Java中要想实现ZIP的压缩需要导入java.util.zip包,可以使用此包中的ZipFile、ZipOutputStream、ZipInputStream、ZipEntry几个类完成。

testZip

package com.kuang.zip; import org.apache.commons.io.IOUtils; import java.io.*; import java.util.Enumeration; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; public class testZip { public static void unZipIt(String file, String outputFolder) throws IOException { ZipFile zipFile = null; InputStream in=null; OutputStream out=null; try { zipFile = new ZipFile(file); Enumeration   entries = zipFile.entries(); while (entries.hasMoreElements()) { ZipEntry entry = entries.nextElement(); File entryDestination = new File(outputFolder, entry.getName()); if (entry.isDirectory()) { entryDestination.mkdirs(); } else { entryDestination.getParentFile().mkdirs(); try { out = new FileOutputStream(entryDestination); in = zipFile.getInputStream(entry); IOUtils.copy(in, out); } catch (IOException e) { throw e; }finally { IOUtils.closeQuietly(in); IOUtils.closeQuietly(out); } } } } finally { try { if(zipFile!=null){zipFile.close();zipFile=null;} } catch (IOException e) { } } } public static void main(String[] args) throws Exception { unZipIt("D:\\Test\\TestbyYTT.zip","D:\\Test\\"); } } 

org.apache.commons.io.IOUtils需引入maven依赖

 commons-iocommons-io2.4

org.apache.commons.io.IOUtils.closeQuietly()只是确保流会被关闭,无论流是否正常结束,看源码发现closeQuietly它会忽略异常


那么为什么IOUtils.closeQuietly()会在2.6的时候将它标记为过时呢?

因为Java7里的try-with-resource语法糖的出现,之前定义在try catch外部的流移到了try后边的括号里,不再需要手动关闭了,它会自行处理。

public static void readAll() { try ( FileReader fileReader = new FileReader("test"); BufferedReader bufferedReader = new BufferedReader(fileReader) ) { String line; while ((line = bufferedReader.readLine()) != null) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } }

拓展:还有一种语法叫multi-catch 可以简化多个catch

FileZip

package com.kuang.zip; import java.io.*; import java.util.zip.*; import java.util.zip.ZipEntry; public class FileZip { /** * zip文件压缩 * @param inputFile 待压缩文件夹/文件名 * @param outputFile 生成的压缩包名字 */ public static void ZipCompress(String inputFile, String outputFile) throws Exception { //创建zip输出流 ZipOutputStream out = new ZipOutputStream(new FileOutputStream(outputFile)); //创建缓冲输出流 BufferedOutputStream bos = new BufferedOutputStream(out); File input = new File(inputFile); compress(out, bos, input,null); bos.close(); out.close(); } /** * @param name 压缩文件名,可以写为null保持默认 */ //递归压缩 public static void compress(ZipOutputStream out, BufferedOutputStream bos, File input, String name) throws IOException { if (name == null) { name = input.getName(); } //如果路径为目录(文件夹) if (input.isDirectory()) { //取出文件夹中的文件(或子文件夹) File[] flist = input.listFiles(); if (flist.length == 0)//如果文件夹为空,则只需在目的地zip文件中写入一个目录进入 { out.putNextEntry(new ZipEntry(name + "/")); } else//如果文件夹不为空,则递归调用compress,文件夹中的每一个文件(或文件夹)进行压缩 { for (int i = 0; i 

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持0133技术站。

以上就是Java如何实现压缩文件与解压缩zip文件的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » Java