压缩文件 :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
相关文章
猜你喜欢
- 个人网站搭建:如何挑选具有弹性扩展能力的服务器? 2025-06-10
- 个人服务器网站搭建:如何选择适合自己的建站程序或框架? 2025-06-10
- 64M VPS建站:能否支持高流量网站运行? 2025-06-10
- 64M VPS建站:怎样选择合适的域名和SSL证书? 2025-06-10
- 64M VPS建站:怎样优化以提高网站加载速度? 2025-06-10
TA的动态
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
您的支持,是我们最大的动力!
热门文章
-
CentOS Linux系统搭建Android开发环境详细介绍
2025-05-27 16 -
2025-05-25 53
-
2025-06-04 18
-
2025-05-27 46
-
2025-06-04 56
热门评论