Administrator
2022-09-14 58d006e05dcf2a20d0ec5367dd03d66a61db6849
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
package com.mandi.servlet.file.impl;
 
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Enumeration;
import java.util.zip.CRC32;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
 
 
import com.mandi.servlet.file.Zipfile;
 
/** 
 * @author mengly 
 * @version 创建时间:2015年11月6日 下午7:00:20 
 * 类说明 
 */
 
public class Zipfileimpl implements Zipfile {
    private int buffersize=1024;
    @Override
    public File zip(String path,String dest) {
        File sf=new File(path);
        if(!sf.exists())
            return null;
        this.zip(sf, dest);
        return null;
    }
    private void compress(File f,ZipOutputStream zos,String pathbase)
    {
        if(f.isDirectory())
        {
            File[] files = f.listFiles();
            if(files.length<1)
            {
                ZipEntry ze=new ZipEntry(pathbase + f.getName()+ File.separator);
                try {
                    zos.putNextEntry(ze);
                    zos.closeEntry();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }else{
                for (File file : files) {
                    compress(file, zos,f.getName()+ File.separator);
                }
            }
        }else if(f.isFile()){
            ZipEntry ze=new ZipEntry(pathbase + f.getName());
            BufferedInputStream bis=null;
            try {
                zos.putNextEntry(ze);
                int count;
                bis=new BufferedInputStream(new FileInputStream(f));
                byte data[]=new byte[buffersize];
                while((count=bis.read(data, 0, buffersize))!=-1)
                {
                    zos.write(data,0,count);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }finally{
                try {
                    bis.close();
                    zos.closeEntry();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        
    }
 
    @Override
    public File zip(File file,String dest) {
        if(!file.exists())
            return null;
        ZipOutputStream zos=null;
        try {
            File df=new File(dest);
            CheckedOutputStream cos=new CheckedOutputStream(new FileOutputStream(df), new CRC32());
            zos=new ZipOutputStream(cos);
            if(file.isFile())
                compress(file,zos,"");
            else{
                File[] fs=file.listFiles();
                for (File file2 : fs) {
                    compress(file2,zos,"");
                }
            }
            return df;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }finally{
            try {
                zos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
 
    @Override
    public File unzip(String path,String dest) {
        File f=new File(path);
        if(!f.exists())
            return null;
        this.unzip(f, dest);
        return null;
    }
 
    @Override
    public File unzip(File file,String dest) {
        File destfile=new File(dest);
        if(!destfile.exists()||!destfile.isDirectory())
            destfile.mkdirs();
        if(!dest.endsWith(File.separator))
        {
            dest=dest+File.separator;
        }
        ZipFile zf=null;
        try{
            zf=new ZipFile(file,Charset.forName(System.getProperty("sun.jnu.encoding")));
            Enumeration<ZipEntry> enums=(Enumeration<ZipEntry>) zf.entries();
            while(enums.hasMoreElements())
            {
                ZipEntry zee=enums.nextElement();
                if(zee.isDirectory())
                {
                    String entryname=zee.getName();
                    String tempname=dest+entryname.substring(0,entryname.length()-1);
                    File f = new File(tempname);
                    if (!f.exists()||!f.isDirectory())
                        f.mkdirs();
                }else{
                    Files.copy(zf.getInputStream(zee), Paths.get(dest+zee.getName()));
                }
            }
            
            
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            try {
                zf.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
        return null;
    }
 
}