服务器之家

服务器之家 > 正文

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

时间:2020-08-21 11:23     来源/作者:TryTestwonderful

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

删除文件:deleteFolder(File folder)

java" id="highlighter_10507">
?
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压缩文件与删除文件内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

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

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享 2020-04-07
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
最新idea2020注册码永久激活(激活到2100年)
最新idea2020注册码永久激活(激活到2100年) 2020-07-29
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
返回顶部