首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

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

2013-04-20 
JAVA实现实用的ZIP压缩与解压程序实现了ZIP压缩。共分为2部分 : 压缩(compression)与解压(decompression)大

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

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

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

[java]?view plaincopy
  1. package?com.han;??
  2. ??
  3. import?java.io.*;??
  4. import?java.util.zip.*;??
  5. ??
  6. /**?
  7. ?*?程序实现了ZIP压缩。共分为2部分?:?压缩(compression)与解压(decompression)?
  8. ?*?<p>?
  9. ?*?大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压。?需在代码中自定义源输入路径和目标输出路径。?
  10. ?*?<p>?
  11. ?*?在本段代码中,实现的是压缩部分;解压部分见本包中Decompression部分。?
  12. ?*??
  13. ?*?@author?HAN?
  14. ?*??
  15. ?*/??
  16. ??
  17. public?class?MyZipCompressing?{??
  18. ????private?int?k?=?1;?//?定义递归次数变量??
  19. ??
  20. ????public?MyZipCompressing()?{??
  21. ????????//?TODO?Auto-generated?constructor?stub??
  22. ????}??
  23. ??
  24. ????/**?
  25. ?????*?@param?args?
  26. ?????*/??
  27. ????public?static?void?main(String[]?args)?{??
  28. ????????//?TODO?Auto-generated?method?stub??
  29. ????????MyZipCompressing?book?=?new?MyZipCompressing();??
  30. ????????try?{??
  31. ????????????book.zip("C:\\Users\\Gaowen\\Desktop\\ZipTestCompressing.zip",??
  32. ????????????????????new?File("C:\\Users\\Gaowen\\Documents\\Tencent?Files"));??
  33. ????????}?catch?(Exception?e)?{??
  34. ????????????//?TODO?Auto-generated?catch?block??
  35. ????????????e.printStackTrace();??
  36. ????????}??
  37. ??
  38. ????}??
  39. ??
  40. ????private?void?zip(String?zipFileName,?File?inputFile)?throws?Exception?{??
  41. ????????System.out.println("压缩中...");??
  42. ????????ZipOutputStream?out?=?new?ZipOutputStream(new?FileOutputStream(??
  43. ????????????????zipFileName));??
  44. ????????BufferedOutputStream?bo?=?new?BufferedOutputStream(out);??
  45. ????????zip(out,?inputFile,?inputFile.getName(),?bo);??
  46. ????????bo.close();??
  47. ????????out.close();?//?输出流关闭??
  48. ????????System.out.println("压缩完成");??
  49. ????}??
  50. ??
  51. ????private?void?zip(ZipOutputStream?out,?File?f,?String?base,??
  52. ????????????BufferedOutputStream?bo)?throws?Exception?{?//?方法重载??
  53. ????????if?(f.isDirectory())?{??
  54. ????????????File[]?fl?=?f.listFiles();??
  55. ????????????if?(fl.length?==?0)?{??
  56. ????????????????out.putNextEntry(new?ZipEntry(base?+?"/"));?//?创建zip压缩进入点base??
  57. ????????????????System.out.println(base?+?"/");??
  58. ????????????}??
  59. ????????????for?(int?i?=?0;?i?<?fl.length;?i++)?{??
  60. ????????????????zip(out,?fl[i],?base?+?"/"?+?fl[i].getName(),?bo);?//?递归遍历子文件夹??
  61. ????????????}??
  62. ????????????System.out.println("第"?+?k?+?"次递归");??
  63. ????????????k++;??
  64. ????????}?else?{??
  65. ????????????out.putNextEntry(new?ZipEntry(base));?//?创建zip压缩进入点base??
  66. ????????????System.out.println(base);??
  67. ????????????FileInputStream?in?=?new?FileInputStream(f);??
  68. ????????????BufferedInputStream?bi?=?new?BufferedInputStream(in);??
  69. ????????????int?b;??
  70. ????????????while?((b?=?bi.read())?!=?-1)?{??
  71. ????????????????bo.write(b);?//?将字节流写入当前zip目录??
  72. ????????????}??
  73. ????????????bi.close();??
  74. ????????????in.close();?//?输入流关闭??
  75. ????????}??
  76. ????}??
  77. }??


?

[java]?view plaincopy
  1. package?com.han;??
  2. ??
  3. import?java.io.*;??
  4. import?java.util.zip.*;??
  5. /**?
  6. ?*?程序实现了ZIP压缩。共分为2部分?:?
  7. ?*?压缩(compression)与解压(decompression)?
  8. ?*?<p>?
  9. ?*?大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压。?
  10. ?*?需在代码中自定义源输入路径和目标输出路径。?
  11. ?*?<p>?
  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. } ?

热点排行