本教程操作环境:windows7系统、java10版,DELL G3电脑。
1.概念
压缩流可以将输入的数据变为压缩格式后进行输出,或者读取压缩格式的数据后,解压为正常数据。
2.压缩步骤
(1)生成一个压缩类对象,这个对象来自于一个".zip"的文件,通过它产生一ZipOutputStream对象;
(2)生成压缩对象入口,因为需要被压缩的文件不止一个。需要用ZipEntry方法生成压缩入口文件后才能放进压缩文件;
(3)用putNextEntry将压缩入口放入压缩文件;
(4)将文件内容写入了out.write(),将压缩入口和文件流关闭。
3.目录压缩
import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class ZipStreamExam2 { public static void main(String[] args) { try { File file = new File("d:\\zipmultidir"); ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream("d:\\zipmultidir.zip"))); zipDir(file, zos, file); zos.flush(); zos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } //压缩一个目录至zip文件 private static void zipDir(File dir, ZipOutputStream zos, File rootDir) throws IOException { if (!dir.isDirectory()) return; File[] files = dir.listFiles(); for (int i = 0; i < files.length; i++) { if (files[i].isFile()) { System.out.println(files[i].getAbsolutePath()); String now = files[i].getAbsolutePath(); String root = rootDir.getAbsolutePath(); String name = now.substring(root.length() + 1); System.out.println(name); FileInputStream fis = new FileInputStream(files[i]); byte buf[] = new byte[1024]; int len = 0; ZipEntry ze = new ZipEntry(name); zos.putNextEntry(ze); while ((len = fis.read(buf)) != -1) { zos.write(buf, 0, len); } fis.close(); } else if (files[i].isDirectory()) { zipDir(files[i], zos, rootDir); } } } }
4.解压到目录
import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; /** * Created by test2 on 2016/8/19. */ public class ZipStreamExam3 { public static void main(String[] args) { try { File srcFile = new File("d:\\zipmultidir.zip"); System.out.println(srcFile.getCanonicalPath()); String curDir = srcFile.getParent()+File.separator+"destDir"+File.separator; ZipInputStream zipInputStream = new ZipInputStream(new BufferedInputStream(new FileInputStream(srcFile))); ZipEntry ze = null; byte[] buf = new byte[1024]; int len = 0; while ((ze = zipInputStream.getNextEntry()) != null) { String filePath = curDir + ze.getName(); File destFile = new File(filePath); File destDir = new File(destFile.getParent()); if(!destDir.exists()){ destDir.mkdirs(); } BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(destFile)); while ((len = zipInputStream.read(buf)) != -1) { bufferedOutputStream.write(buf, 0, len); } bufferedOutputStream.flush(); bufferedOutputStream.close(); } zipInputStream.close(); } catch (IOException e) { e.printStackTrace(); } } }
以上就是java压缩流的压缩与解压方法,在学习了压缩流的基础知识后,就压缩、解压的方法分别带来代码展示,学会后就可以运行体验压缩流的用法了。