JAVA实现实用的ZIP压缩与解压

[来源] 达内    [编辑] 达内   [时间]2012-11-12

大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压。 需在代码中自定义源输入路径和目标输出路径。

  程序实现了ZIP压缩。共分为2部分 : 压缩(compression)与解压(decompression)

  大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压。 需在代码中自定义源输入路径和目标输出路径。

  view plaincopy to clipboardprint?

  1. package com.han;

  2. import java.io.*;

  3. import java.util.zip.*;

  4.

  5. /**

  6. * 程序实现了ZIP压缩。共分为2部分 :

  7. * 压缩(compression)与解压(decompression)

  8. *

 

  9. * 大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压。

  10. * 需在代码中自定义源输入路径和目标输出路径。

  11. *

 

  12. * 在本段代码中,实现的是压缩部分;解压部分见本包中decompression部分。

  13. * @author HAN

  14. *

  15. */

  16. public class CopyOfMyZipCompressing {

  17. private int k=1; //定义递归次数变量

  18. public CopyOfMyZipCompressing() {

  19. // TODO Auto-generated constructor stub

  20. }

  21.

  22. public static void main(String[] args) {

  23. // TODO Auto-generated method stub

  24. long startTime=System.currentTimeMillis();

  25. CopyOfMyZipCompressing book=new CopyOfMyZipCompressing();

  26. try {

  27. book.zip("C:\\Users\\HAN\\Desktop\\stock\\SpectreCompressed.zip", //自定义的zip输出路径

  28. new File("C:\\Users\\HAN\\Desktop\\CombinedSpectres.txt")); //自定义的源输入路径,即要压缩的文件或文件夹

  29. } catch (Exception e) {

  30. // TODO Auto-generated catch block

  31. e.printStackTrace();

  32. }

  33. long endTime=System.currentTimeMillis();

  34. System.out.println("耗费时间: "+(endTime-startTime)+" ms");

  35. }

  36.

  37. private void zip(String zipFileName, File inputFile) throws Exception{

  38. System.out.println("压缩中...");

  39. ZipOutputStream out=new ZipOutputStream(new FileOutputStream(zipFileName));

  40. BufferedOutputStream bo=new BufferedOutputStream(out);

  41. zip(out,inputFile, "/"+inputFile.getName(),bo);

  42. bo.close();

  43. out.close(); //输出流关闭

  44. System.out.println("压缩完成");

  45. }

  46. private void zip(ZipOutputStream out, File f, String base, BufferedOutputStream bo)

  47. throws Exception{ //方法重载

  48. if (f.isDirectory()){

  49. File[] fl=f.listFiles();

  50. for(int i=0;i

  51. zip(out, fl[i],base+"/"+fl[i].getName(),bo); //递归遍历子文件夹

  52. }

  53. System.out.println("第"+k+"次递归");

  54. k++;

  55. }else{

  56. out.putNextEntry(new ZipEntry(base)); // 创建zip压缩进入点base

  57. System.out.println(base);

  58. FileInputStream in=new FileInputStream(f);

  59. BufferedInputStream bi=new BufferedInputStream(in);

  60. int b;

  61. while((b=bi.read())!=-1){

  62. bo.write(b); //将字节流写入当前zip目录

  63. }

  64. bi.close();

  65. in.close(); //输入流关闭

  66. }

  67. }

  68. }

  1. package com.han;

  2.

  3. import java.io.*;

  4. import java.util.zip.*;

  5. /**

  6. * 程序实现了ZIP压缩。共分为2部分 :

  7. * 压缩(compression)与解压(decompression)

  8. *

 

  9. * 大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压。

  10. * 需在代码中自定义源输入路径和目标输出路径。

  11. *

 

  12. * 在本段代码中,实现的是解压部分;压缩部分见本包中compression部分。

  13. * @author HAN

  14. *

  15. */

  16. public class CopyOfMyzipDecompressing {

  17.

  18. public static void main(String[] args) {

  19. // TODO Auto-generated method stub

  20. long startTime=System.currentTimeMillis();

  21. try {

  22. ZipInputStream Zin=new ZipInputStream(new FileInputStream(

  23. "C:\\Users\\HAN\\Desktop\\stock\\SpectreCompressed.zip"));//输入源zip路径

  24. BufferedInputStream Bin=new BufferedInputStream(Zin);

  25. String Parent="C:\\Users\\HAN\\Desktop"; //输出路径(文件夹目录)

  26. File Fout=null;

  27. ZipEntry entry;

  28. try {

  29. while((entry = Zin.getNextEntry())!=null && !entry.isDirectory()){

  30. Fout=new File(Parent,entry.getName());

  31. if(!Fout.exists()){

  32. (new File(Fout.getParent())).mkdirs();

  33. }

  34. FileOutputStream out=new FileOutputStream(Fout);

  35. BufferedOutputStream Bout=new BufferedOutputStream(out);

  36. int b;

  37. while((b=Bin.read())!=-1){

  38. Bout.write(b);

  39. }

  40. Bout.close();

  41. out.close();

  42. System.out.println(Fout+"解压成功");

  43. }

  44. Bin.close();

  45. Zin.close();

  46. } catch (IOException e) {

  47. // TODO Auto-generated catch block

  48. e.printStackTrace();

  49. }

  50. } catch (FileNotFoundException e) {

  51. // TODO Auto-generated catch block

  52. e.printStackTrace();

  53. }

  54. long endTime=System.currentTimeMillis();

  55. System.out.println("耗费时间: "+(endTime-startTime)+" ms");

  56. }

  57.

  58. }

资源下载