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

用java兑现zip压缩

2012-10-17 
用java实现zip压缩今天写了个用java压缩的功能,可以实现对文件和目录的压缩。?由于java.util.zip.ZipOutput

用java实现zip压缩

今天写了个用java压缩的功能,可以实现对文件和目录的压缩。?

由于java.util.zip.ZipOutputStream有中文乱码问题,所以采用org.apache.tools.zip.ZipOutputStream。?
以下是代码:?

Java代码??用java兑现zip压缩
  1. package?net.szh.zip;??
  2. ??
  3. import?java.io.BufferedInputStream;??
  4. import?java.io.File;??
  5. import?java.io.FileInputStream;??
  6. import?java.io.FileOutputStream;??
  7. import?java.util.zip.CRC32;??
  8. import?java.util.zip.CheckedOutputStream;??
  9. ??
  10. import?org.apache.tools.zip.ZipEntry;??
  11. import?org.apache.tools.zip.ZipOutputStream;??
  12. ??
  13. public?class?ZipCompressor?{??
  14. ????static?final?int?BUFFER?=?8192;??
  15. ??
  16. ????private?File?zipFile;??
  17. ??
  18. ????public?ZipCompressor(String?pathName)?{??
  19. ????????zipFile?=?new?File(pathName);??
  20. ????}??
  21. ??
  22. ????public?void?compress(String?srcPathName)?{??
  23. ????????File?file?=?new?File(srcPathName);??
  24. ????????if?(!file.exists())??
  25. ????????????throw?new?RuntimeException(srcPathName?+?"不存在!");??
  26. ????????try?{??
  27. ????????????FileOutputStream?fileOutputStream?=?new?FileOutputStream(zipFile);??
  28. ????????????CheckedOutputStream?cos?=?new?CheckedOutputStream(fileOutputStream,??
  29. ????????????????????new?CRC32());??
  30. ????????????ZipOutputStream?out?=?new?ZipOutputStream(cos);??
  31. ????????????String?basedir?=?"";??
  32. ????????????compress(file,?out,?basedir);??
  33. ????????????out.close();??
  34. ????????}?catch?(Exception?e)?{??
  35. ????????????throw?new?RuntimeException(e);??
  36. ????????}??
  37. ????}??
  38. ??
  39. ????private?void?compress(File?file,?ZipOutputStream?out,?String?basedir)?{??
  40. ????????/*?判断是目录还是文件?*/??
  41. ????????if?(file.isDirectory())?{??
  42. ????????????System.out.println("压缩:"?+?basedir?+?file.getName());??
  43. ????????????this.compressDirectory(file,?out,?basedir);??
  44. ????????}?else?{??
  45. ????????????System.out.println("压缩:"?+?basedir?+?file.getName());??
  46. ????????????this.compressFile(file,?out,?basedir);??
  47. ????????}??
  48. ????}??
  49. ??
  50. ????/**?压缩一个目录?*/??
  51. ????private?void?compressDirectory(File?dir,?ZipOutputStream?out,?String?basedir)?{??
  52. ????????if?(!dir.exists())??
  53. ????????????return;??
  54. ??
  55. ????????File[]?files?=?dir.listFiles();??
  56. ????????for?(int?i?=?0;?i?<?files.length;?i++)?{??
  57. ????????????/*?递归?*/??
  58. ????????????compress(files[i],?out,?basedir?+?dir.getName()?+?"/");??
  59. ????????}??
  60. ????}??
  61. ??
  62. ????/**?压缩一个文件?*/??
  63. ????private?void?compressFile(File?file,?ZipOutputStream?out,?String?basedir)?{??
  64. ????????if?(!file.exists())?{??
  65. ????????????return;??
  66. ????????}??
  67. ????????try?{??
  68. ????????????BufferedInputStream?bis?=?new?BufferedInputStream(??
  69. ????????????????????new?FileInputStream(file));??
  70. ????????????ZipEntry?entry?=?new?ZipEntry(basedir?+?file.getName());??
  71. ????????????out.putNextEntry(entry);??
  72. ????????????int?count;??
  73. ????????????byte?data[]?=?new?byte[BUFFER];??
  74. ????????????while?((count?=?bis.read(data,?0,?BUFFER))?!=?-1)?{??
  75. ????????????????out.write(data,?0,?count);??
  76. ????????????}??
  77. ????????????bis.close();??
  78. ????????}?catch?(Exception?e)?{??
  79. ????????????throw?new?RuntimeException(e);??
  80. ????????}??
  81. ????}??
  82. }??



后来发现原来可以用ant中的org.apache.tools.ant.taskdefs.Zip来实现,更加简单。

Java代码??用java兑现zip压缩
  1. package?net.szh.zip;??
  2. ??
  3. import?java.io.File;??
  4. ??
  5. import?org.apache.tools.ant.Project;??
  6. import?org.apache.tools.ant.taskdefs.Zip;??
  7. import?org.apache.tools.ant.types.FileSet;??
  8. ??
  9. public?class?ZipCompressorByAnt?{??
  10. ??
  11. ????private?File?zipFile;??
  12. ??
  13. ????public?ZipCompressorByAnt(String?pathName)?{??
  14. ????????zipFile?=?new?File(pathName);??
  15. ????}??
  16. ??????
  17. ????public?void?compress(String?srcPathName)?{??
  18. ????????File?srcdir?=?new?File(srcPathName);??
  19. ????????if?(!srcdir.exists())??
  20. ????????????throw?new?RuntimeException(srcPathName?+?"不存在!");??
  21. ??????????
  22. ????????Project?prj?=?new?Project();??
  23. ????????Zip?zip?=?new?Zip();??
  24. ????????zip.setProject(prj);??
  25. ????????zip.setDestFile(zipFile);??
  26. ????????FileSet?fileSet?=?new?FileSet();??
  27. ????????fileSet.setProject(prj);??
  28. ????????fileSet.setDir(srcdir);??
  29. ????????//fileSet.setIncludes("**/*.java");?包括哪些文件或文件夹?eg:zip.setIncludes("*.java");??
  30. ????????//fileSet.setExcludes(...);?排除哪些文件或文件夹??
  31. ????????zip.addFileset(fileSet);??
  32. ??????????
  33. ????????zip.execute();??
  34. ????}??
  35. }??


测试一下

Java代码??用java兑现zip压缩
  1. package?net.szh.zip;??
  2. ??
  3. public?class?TestZip?{??
  4. ????public?static?void?main(String[]?args)?{??
  5. ????????ZipCompressor?zc?=?new??ZipCompressor("E:\\szhzip.zip");??
  6. ????????zc.compress("E:\\test");??
  7. ??????????
  8. ????????ZipCompressorByAnt?zca?=?new?ZipCompressorByAnt("E:\\szhzipant.zip");??
  9. ????????zca.compress("E:\\test");??
  10. ????}??
  11. } ?

?

热点排行