一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - JAVA教程 - Java壓縮文件工具類ZipUtil使用方法代碼示例

Java壓縮文件工具類ZipUtil使用方法代碼示例

2021-02-23 11:21mao2080 JAVA教程

這篇文章主要介紹了Java壓縮文件工具類ZipUtil使用方法代碼示例,具有一定借鑒價值,需要的朋友可以參考下。

本文實例通過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

延伸 · 閱讀

精彩推薦
  • JAVA教程深入講解Java編程中類的生命周期

    深入講解Java編程中類的生命周期

    這篇文章主要介紹了深入講解Java編程中類的生命周期,在帶有垃圾回收功能的Java虛擬機上運行的程序中類的生命周期就顯得格外重要,需要的朋友可以參考下...

    卡奴達摩4062020-08-11
  • JAVA教程Java 中HashCode作用_動力節點Java學院整理

    Java 中HashCode作用_動力節點Java學院整理

    這篇文章主要介紹了Java 中HashCode作用以及hashcode對于一個對象的重要性,對java中hashcode的作用相關知識感興趣的朋友一起學習吧...

    動力節點1672020-09-28
  • JAVA教程spring boot集成rabbitmq的實例教程

    spring boot集成rabbitmq的實例教程

    這篇文章主要給大家介紹了關于spring boot集成rabbitmq的相關資料,springboot集成RabbitMQ非常簡單,文中通過示例代碼介紹的非常詳細,需要的朋友們可以參考借...

    陳凡了6592021-01-29
  • JAVA教程java通過url讀取文件內容示例

    java通過url讀取文件內容示例

    這篇文章主要介紹了java通過url讀取文件內容示例,大家參考使用吧 ...

    java教程網3252019-11-01
  • JAVA教程并發編程把我整的是服服氣氣的了

    并發編程把我整的是服服氣氣的了

    阿粉因為原來的編程習慣,已經很久沒有去考慮并發的問題了,結果之前在面試的問題就回答的不是很完善,而阿粉也用心學習了并發編程這一塊的所有內...

    Java極客技術4122020-12-09
  • JAVA教程JVM 體系結構詳解

    JVM 體系結構詳解

    本文主要介紹了JVM體系結構的相關知識。具有很好的參考價值。下面跟著小編一起來看下吧 ...

    創心coder4082020-08-27
  • JAVA教程淺談IDEA中Maven配置問題全解決

    淺談IDEA中Maven配置問題全解決

    這篇文章主要介紹了淺談IDEA中Maven配置問題全解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下...

    CringKong4522020-07-25
  • JAVA教程idea2019.2安裝MybatisCodeHelper插件的超詳細教程

    idea2019.2安裝MybatisCodeHelper插件的超詳細教程

    這篇文章主要介紹了idea2019.2安裝MybatisCodeHelper插件的教程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考...

    edda_huang4052020-09-29
主站蜘蛛池模板: 日韩精品欧美激情国产一区 | 2022天堂岛日产 | 精品国产一级毛片大全 | 91丝袜足控免费网站xx | 日本三级做a全过程在线观看 | 99久久精品6在线播放 | 521色香蕉网站在线观看 | 四虎4hu永久免费 | 国内自拍视频在线观看 | 国产精品一区二区三区免费视频 | 久久久久久久国产精品视频 | 456老汉gay| 成人免费国产欧美日韩你懂的 | 美女把腿开让我 | 丝袜捆绑调教视频免费区 | 18young第一次| 日本性爱 | avove全部视频在线观看 | 喷奶水榨乳ova动漫无修 | 免费观看大片毛片 | 国产91页 | 99re8在线精品视频免费播放 | 双性肉文高h | xnxx18美女| 久久这里只有精品无码3D | 日韩精品亚洲一级在线观看 | h日本漫画全彩在线观看 | 久久99视热频国只有精品 | leslessexvideos日本| 护士被多人调教到失禁h | 午夜欧美精品久久久久久久 | 无码AV免费精品一区二区三区 | 久久视热频国产这里只有精品23 | 国产播放器一区 | 亚洲国产精品一区二区首页 | 极品一区| 日韩在线成人 | 久久综合中文字幕佐佐木希 | 国产美女做爰免费视频网址 | 亚洲精品中文字幕第一区 | 希岛爱理作品在线观看 |