本文實例通過Java的Zip輸入輸出流實現壓縮和解壓文件,前一部分代碼實現獲取文件路徑,壓縮文件名的更改等,具體如下:
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
|
package com.utility.zip; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; import com.utility.io.IOUtil; /** * 通過Java的Zip輸入輸出流實現壓縮和解壓文件 * * @author liujiduo * */ public final class ZipUtil { private ZipUtil() { // empty } /** * 壓縮文件 * * @param filePath * 待壓縮的文件路徑 * @return 壓縮后的文件 */ public static File zip(String filePath) { File target = null ; File source = new File(filePath); if (source.exists()) { // 壓縮文件名=源文件名.zip String zipName = source.getName() + ".zip" ; target = new File(source.getParent(), zipName); if (target.exists()) { target.delete(); // 刪除舊的文件 } FileOutputStream fos = null ; ZipOutputStream zos = null ; try { fos = new FileOutputStream(target); zos = new ZipOutputStream( new BufferedOutputStream(fos)); // 添加對應的文件Entry addEntry( "/" , source, zos); } catch (IOException e) { throw new RuntimeException(e); } finally { IOUtil.closeQuietly(zos, fos); } } return target; } /** * 掃描添加文件Entry * * @param base * 基路徑 * * @param source * 源文件 * @param zos * Zip文件輸出流 * @throws IOException */ private static void addEntry(String base, File source, ZipOutputStream zos) throws IOException { // 按目錄分級,形如:/aaa/bbb.txt String entry = base + source.getName(); if (source.isDirectory()) { for (File file : source.listFiles()) { // 遞歸列出目錄下的所有文件,添加文件Entry addEntry(entry + "/" , file, zos); } } else { FileInputStream fis = null ; BufferedInputStream bis = null ; try { byte [] buffer = new byte [ 1024 * 10 ]; fis = new FileInputStream(source); bis = new BufferedInputStream(fis, buffer.length); int read = 0 ; zos.putNextEntry( new ZipEntry(entry)); while ((read = bis.read(buffer, 0 , buffer.length)) != - 1 ) { zos.write(buffer, 0 , read); } zos.closeEntry(); } finally { IOUtil.closeQuietly(bis, fis); } } } /** * 解壓文件 * * @param filePath * 壓縮文件路徑 */ public static void unzip(String filePath) { File source = new File(filePath); if (source.exists()) { ZipInputStream zis = null ; BufferedOutputStream bos = null ; try { zis = new ZipInputStream( new FileInputStream(source)); ZipEntry entry = null ; while ((entry = zis.getNextEntry()) != null && !entry.isDirectory()) { File target = new File(source.getParent(), entry.getName()); if (!target.getParentFile().exists()) { // 創建文件父目錄 target.getParentFile().mkdirs(); } // 寫入文件 bos = new BufferedOutputStream( new FileOutputStream(target)); int read = 0 ; byte [] buffer = new byte [ 1024 * 10 ]; while ((read = zis.read(buffer, 0 , buffer.length)) != - 1 ) { bos.write(buffer, 0 , read); } bos.flush(); } zis.closeEntry(); } catch (IOException e) { throw new RuntimeException(e); } finally { IOUtil.closeQuietly(zis, bos); } } } public static void main(String[] args) { String targetPath = "E:\\Win7壁紙" ; File file = ZipUtil.zip(targetPath); System.out.println(file); ZipUtil.unzip( "F:\\Win7壁紙.zip" ); } } |
下面是通過IO流工具類實現關閉一個或多個流對象的Java語言描述,獲取可關閉的流對象列表,具體如下:
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
|
package com.utility.io; import java.io.Closeable; import java.io.IOException; /** * IO流工具類 * * @author liujiduo * */ public class IOUtil { /** * 關閉一個或多個流對象 * * @param closeables * 可關閉的流對象列表 * @throws IOException */ public static void close(Closeable... closeables) throws IOException { if (closeables != null ) { for (Closeable closeable : closeables) { if (closeable != null ) { closeable.close(); } } } } /** * 關閉一個或多個流對象 * * @param closeables * 可關閉的流對象列表 */ public static void closeQuietly(Closeable... closeables) { try { close(closeables); } catch (IOException e) { // do nothing } } } |
總結
以上就是本文關于Java壓縮文件工具類ZipUtil使用方法代碼示例的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。
原文鏈接:https://www.cnblogs.com/mao2080/p/7435268.html