月球大数据地理空间分析展示平台-【后端】-月球后台服务
1
13693261870
2024-11-17 796b44ea813a1133beae4f3a67f1c0263510c0c7
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
package com.moon.server.helper;
 
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
 
import java.io.*;
import java.nio.charset.Charset;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
 
@SuppressWarnings("ALL")
public class ZipHelper {
    private final static int BUFFER_SIZE = 1024;
 
    private final static byte[] BUFFER = new byte[1024];
 
    private final static Log log = LogFactory.getLog(ZipHelper.class);
 
    public static boolean unzip(String filePath, String zipDir) {
        ZipFile zipFile = null;
        try {
            File dir = new File(zipDir);
            if (!dir.exists() || !dir.isDirectory()) {
                dir.mkdirs();
            }
 
            zipFile = new ZipFile(filePath, Charset.forName("GBK"));
            createDirs(zipFile, zipDir);
            writeFiles(zipFile, zipDir);
 
            return true;
        } catch (Exception ex) {
            log.error(ex.getMessage(), ex);
            return false;
        } finally {
            try {
                if (null != zipFile) {
                    zipFile.close();
                }
            } catch (Exception e) {
                log.error(e.getMessage(), e);
            }
        }
    }
 
    private static void createDirs(ZipFile zipFile, String zipDir) {
        Enumeration<?> e = zipFile.entries();
        while (e.hasMoreElements()) {
            ZipEntry entry = (ZipEntry) e.nextElement();
            if (entry.isDirectory()) {
                File f = new File(zipDir + File.separator + entry.getName());
                if (!f.exists()) {
                    f.mkdirs();
                }
            }
        }
    }
 
    private static void writeFiles(ZipFile zipFile, String zipDir) throws IOException {
        Enumeration<?> e = zipFile.entries();
        while (e.hasMoreElements()) {
            ZipEntry entry = (ZipEntry) e.nextElement();
            if (!entry.isDirectory()) {
                writeFile(zipFile, entry, zipDir);
            }
        }
    }
 
    private static void writeFile(ZipFile zipFile, ZipEntry entry, String zipDir) throws IOException {
        int count;
 
        BufferedInputStream is = new BufferedInputStream(zipFile.getInputStream(entry));
        FileOutputStream fos = new FileOutputStream(zipDir + File.separator + entry.getName());
        BufferedOutputStream dest = new BufferedOutputStream(fos, BUFFER_SIZE);
        while ((count = is.read(BUFFER, 0, BUFFER_SIZE)) != -1) {
            dest.write(BUFFER, 0, count);
        }
 
        dest.flush();
        dest.close();
        fos.close();
        is.close();
    }
 
    public static boolean zip(String zipFile, String sourceDir) {
        FileOutputStream fos = null;
        ZipOutputStream zos = null;
        try {
            fos = new FileOutputStream(zipFile);
            zos = new ZipOutputStream(fos);
 
            File sourceFile = new File(sourceDir);
            compress(sourceFile, zos, sourceFile.getName());
 
            return true;
        } catch (Exception ex) {
            log.error(ex.getMessage(), ex);
            return false;
        } finally {
            try {
                if (null != zos) {
                    zos.close();
                }
                if (null != fos) {
                    fos.close();
                }
            } catch (Exception e) {
                log.error(e.getMessage(), e);
            }
        }
    }
 
    public static void compress(File sourceFile, ZipOutputStream zos, String name) throws Exception {
        if (sourceFile.isFile()) {
            zos.putNextEntry(new ZipEntry(name));
 
            int len;
            FileInputStream in = new FileInputStream(sourceFile);
            while ((len = in.read(BUFFER)) != -1) {
                zos.write(BUFFER, 0, len);
            }
            zos.closeEntry();
            in.close();
        } else {
            File[] listFiles = sourceFile.listFiles();
            if (listFiles == null || listFiles.length == 0) {
                zos.putNextEntry(new ZipEntry(name + "/"));
                zos.closeEntry();
            } else {
                for (File file : listFiles) {
                    compress(file, zos, name + "/" + file.getName());
                }
            }
        }
    }
}