java压缩文件与删除文件的示例代码

2025-05-29 0 69

压缩文件 :toZip(String srcDir, OutputStream out,boolean KeepDirStructure)

删除文件:deleteFolder(File folder)

?

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

165

166

167

168

169

170

171

172

173

174

175

176

177

178
/**

* 压缩成ZIP 方法1

*

* @param srcDir

* 压缩文件夹路径

* @param out

* 压缩文件输出流

* @param KeepDirStructure

* 是否保留原来的目录结构,true:保留目录结构;

* false:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败)

* @throws RuntimeException

* 压缩失败会抛出运行时异常

*/

protected void toZip(String srcDir, OutputStream out,

boolean KeepDirStructure) throws RuntimeException {

long start = System.currentTimeMillis();

ZipOutputStream zos = null;

try {

zos = new ZipOutputStream(out);

File sourceFile = new File(srcDir);

compress(sourceFile, zos, sourceFile.getName(), KeepDirStructure);

long end = System.currentTimeMillis();

System.out.println("压缩完成,耗时:" + (end - start) + " ms");

} catch (Exception e) {

throw new RuntimeException("zip error from ZipUtils", e);

} finally {

if (zos != null) {

try {

zos.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

/**

* 递归压缩方法

*

* @param sourceFile

* 源文件

* @param zos

* zip输出流

* @param name

* 压缩后的名称

* @param KeepDirStructure

* 是否保留原来的目录结构,true:保留目录结构;

* false:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败)

* @throws Exception

*/

private static void compress(File sourceFile, ZipOutputStream zos,

String name, boolean KeepDirStructure) throws Exception {

byte[] buf = new byte[BUFFER_SIZE];

if (sourceFile.isFile()) {

// 向zip输出流中添加一个zip实体,构造器中name为zip实体的文件的名字

zos.putNextEntry(new ZipEntry(name));

// copy文件到zip输出流中

int len;

FileInputStream in = new FileInputStream(sourceFile);

while ((len = in.read(buf)) != -1) {

zos.write(buf, 0, len);

}

// Complete the entry

zos.closeEntry();

in.close();

} else {

File[] listFiles = sourceFile.listFiles();

if (listFiles == null || listFiles.length == 0) {

// 需要保留原来的文件结构时,需要对空文件夹进行处理

if (KeepDirStructure) {

// 空文件夹的处理

zos.putNextEntry(new ZipEntry(name + "/"));

// 没有文件,不需要文件的copy

zos.closeEntry();

}

} else {

for (File file : listFiles) {

// 判断是否需要保留原来的文件结构

if (KeepDirStructure) {

// 注意:file.getName()前面需要带上父文件夹的名字加一斜杠,

// 不然最后压缩包中就不能保留原来的文件结构,即:所有文件都跑到压缩包根目录下了

compress(file, zos, name + "/" + file.getName(),

KeepDirStructure);

} else {

compress(file, zos, file.getName(), KeepDirStructure);

}

}

}

}

}

/**

* 删除文件夹

*

* @param folder

*/

protected void deleteFolder(File folder) {

// 待删除文件路径

String path = this.getClass().getResource("/").getPath().replace(

"WEB-INF/classes/", "postFile/");

if (folder.isDirectory()) {

File[] files = folder.listFiles();

for (int i = 0; i < files.length; i++) {

deleteFolder(files[i]);

}

// 非当前目录,删除

if (!folder.getAbsolutePath().equalsIgnoreCase(path)) {

// // 只删除在7天前创建的文件

// if (canDeleteFile(folder)) {

// if (folder.delete()) {

// System.out.println("文件夹" + folder.getName() + "删除成功!");

// } else {

// System.out.println("文件夹" + folder.getName()

// + "删除失败!此文件夹内的文件可能正在被使用");

// }

// }

//只要是空的文件夹就删除不区分几天前创建

if (folder.delete()) {

System.out.println("文件夹" + folder.getName() + "删除成功!");

} else {

System.out.println("文件夹" + folder.getName()

+ "删除失败!此文件夹内的文件可能正在被使用");

}

}

} else {

deleteFile(folder);

}

}

/**

* 判断文件是否能够被删除

*/

protected boolean canDeleteFile(File file) {

Date fileDate = getfileDate(file);

Date date = new Date();

long time = (date.getTime() - fileDate.getTime()) / 1000 / 60 / 60 / 24;// 当前时间与文件创建时间的间隔天数

// 大于7天可删除,小于10天不删除

if (time > 10) {

return true;

} else {

return false;

}

// return true;

}

/**

* 获取文件最后的修改时间

*

* @param file

* @return

*/

protected Date getfileDate(File file) {

long modifiedTime = file.lastModified();

Date d = new Date(modifiedTime);

return d;

}

/**

* 删除文件

*

* @param file

*/

protected void deleteFile(File file) {

try {

if (file.isFile()) {

// 删除符合条件的文件

if (canDeleteFile(file)) {

if (file.delete()) {

System.out.println("文件" + file.getName() + "删除成功!");

} else {

System.out.println("文件" + file.getName()

+ "删除失败!此文件可能正在被使用");

}

} else {

}

} else {

System.out.println("没有可以删除的文件了");

}

} catch (Exception e) {

System.out.println("删除文件失败========");

e.printStackTrace();

}

}

总结

到此这篇关于java压缩文件删除文件的示例代码的文章就介绍到这了,更多相关java压缩文件删除文件内容请搜索快网idc以前的文章或继续浏览下面的相关文章希望大家以后多多支持快网idc!

原文链接:https://blog.csdn.net/HXiao0805/article/details/108082757

收藏 (0) 打赏

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

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

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

快网idc优惠网 建站教程 java压缩文件与删除文件的示例代码 https://www.kuaiidc.com/118582.html

相关文章

发表评论
暂无评论