Java压缩文件工具类ZipUtil使用方法代码示例

2025-05-27 0 76

本文实例通过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

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Java压缩文件工具类ZipUtil使用方法代码示例 https://www.kuaiidc.com/77042.html

相关文章

发表评论
暂无评论