当前位置:首页 > 对单个文件和任意级联文件夹进行压缩和解压

对单个文件和任意级联文件夹进行压缩和解压

点击次数:1952  更新日期:2013-03-16
程序实现了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. * p
9. * 大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压。
10. * 需在代码中自定义源输入路径和目标输出路径。
11. * p
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;ifl.length;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. * 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.}
\nTAG: \nJava\nJAVA\njava\n\n