国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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

服務器之家 - 編程語言 - Java教程 - 如何基于java實現解壓ZIP TAR等文件

如何基于java實現解壓ZIP TAR等文件

2020-07-29 13:45張志勇- Java教程

這篇文章主要介紹了如何基于java實現解壓ZIP TAR等文件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

  java實現對常用.ZIP , .TAR, .TAR.BZ2, .BZ2 ,.TAR.GZ ,.GZ格式文件的解壓。

  首先需要引入maven依賴,這里使用的是Apache的壓縮工具包common-compress,改工具包支持解壓、壓縮,此代碼中我列舉出一個zip的壓縮示例,其他格式的只需切換改格式對應的流即可。

對于RAR格式文件的解壓,目前該工具包還不支持,希望大家做過的可以多多交流。

?
1
2
3
4
<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-compress</artifactId>
  <version>1.19</version></dependency>
?
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
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
import org.apache.commons.compress.utils.IOUtils;
import java.io.*;
 
/**
 * @author :zhangzhiyong
 * @description:  java實現常見文件格式的解壓與壓縮
 *         支持.ZIP .TAR .TAR.BZ2 .BZ2 .TAR.GZ .GZ
 *         其他格式compress包也支持,在此基礎上開發即可
 *         另外壓縮文件只寫了ZIP壓縮的方法zipCompression,其他的格式類似,換成對應的文件流即可。
 *   暫不支持RAR壓縮格式,RAR可以用junrar的工具包,但是有缺陷:
 *   其一:如果壓縮文件中有中文名字的文件夾,解壓以后文件夾名字是亂碼,但是不影響文件夾里面的文件;
 *   其二:最新 WinRar 壓縮產生的 .rar 文件可能會無法解壓。
 *   缺陷原因:rar 有版權,有些東西沒有公開,對解壓有一些限制,即使其他解壓包也可能有問題,但是建議嘗試。
 * @date :2020/7/1 20:44
 */
public class CompressionFileUtil {
  /**
   * @param filePath 需要解壓的zip文件的完成路徑。
   * @param unzipPath 解壓過后生成文件的存放路徑
   * @description: 對zip文件進行解壓。
   * @return: boolean
   * @author: ZZY
   * @time: 2020/7/2 14:47
   */
  public static boolean zipUnCompress(String filePath, String unzipPath) throws IOException {
 
    System.out.println("開始解壓ZIP..........");
    FileInputStream fis = null;
    ZipArchiveInputStream zis = null;
    try {
      File file = new File(filePath);
      fis = new FileInputStream(file);
      zis = new ZipArchiveInputStream(fis);
      ZipArchiveEntry nze = null;
      while ((nze = zis.getNextZipEntry()) != null) {
        FileOutputStream os = null;
        BufferedOutputStream bos = null;
        try {
          System.out.println("正在解壓....." + nze.getName());
          //自動添加File.separator文件路徑的分隔符,根據系統判斷是\\還是/
          String dir = unzipPath + File.separator + nze.getName(); //解壓全路徑
          System.out.println("dir---" + dir);
          File file1 = null;
          if (nze.isDirectory()) {
            file1 = new File(dir);
            file1.mkdirs();
          } else {
            file1 = new File(dir);
            os = new FileOutputStream(file1);
            bos = new BufferedOutputStream(os);
             /*byte [] bt = new byte[1024];
             int len = 0;
             while((len = zis.read(bt,0,1024)) != -1){
               bos.write(bt,0,len);
             }*/
            IOUtils.copy(zis, bos); //作用與上面注釋代碼一樣
          }
          System.out.println("解壓完成......");
        } catch (FileNotFoundException e) {
          e.printStackTrace();
          return false;
        } finally {
          if (bos != null) {
            bos.close();
          }
          if (os != null) {
            os.close();
          }
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
      return false;
    } finally {
      if (zis != null) {
        zis.close();
      }
      if (fis != null) {
        fis.close();
      }
    }
    return true;
  }
 
  /**
   * @param filesPathArray 多個文件的絕對路徑,是一個數組。
   * @param zipFilePath  生成的壓縮文件的位置,包括生成的文件名,如D:\zip\test.zip
   * @description: 將多個文件壓縮成ZIP壓縮包。
   * @return: boolean
   * @author: ZZY
   * @time: 2020/7/2 14:42
   */
  public static boolean zipCompression(String[] filesPathArray, String zipFilePath) throws Exception {
    System.out.println("開始壓縮ZIP文件");
    ZipArchiveOutputStream zos = null;
    FileOutputStream fos = null;
    try {
      fos = new FileOutputStream(new File(zipFilePath));
      zos = new ZipArchiveOutputStream(fos);
      for (String filePath : filesPathArray) {
        FileInputStream fis = null;
        BufferedInputStream bis = null;
        try {
          File file = new File(filePath);
          // 第二個參數如果是文件全路徑名,那么壓縮時也會將路徑文件夾也縮進去;
          // 我們只壓縮目標文件,而不壓縮該文件所處位置的相關文件夾,所以這里我們用file.getName()
          System.out.println("開始壓縮..." + file.getName());
          ZipArchiveEntry zae = new ZipArchiveEntry(file, file.getName());
          zos.putArchiveEntry(zae);
          fis = new FileInputStream(file);
          bis = new BufferedInputStream(fis);
          int count;
          byte[] bt = new byte[1024];
          while ((count = bis.read(bt, 0, 1024)) != -1) {
            zos.write(bt, 0, count);
          }
        } finally {
          zos.closeArchiveEntry();
          if (bis != null)
            bis.close();
          if (fis != null)
            fis.close();
        }
      }
    } finally {
      if (zos != null)
        zos.close();
      if (fos != null)
        fos.close();
    }
    System.out.println("壓縮完成......");
    return true;
  }
 
  /**
   * @param inputStream 每種TAR文件用不同的輸入流,unCompress方法中已注明
   * @param unTarPath  TAR文件解壓后的存放路徑
   * @description: 解壓TAR類文件,包括.TAR .TAR.BZ2 .TAR.GZ
   * @return: void
   * @author: ZZY
   * @time: 2020/7/2 17:42
   */
  public static void unTar(InputStream inputStream, String unTarPath) throws IOException {
 
    FileInputStream fis = null;
    TarArchiveInputStream tis = null;
    try {
      tis = new TarArchiveInputStream(inputStream);
      TarArchiveEntry nte = null;
      System.out.println("開始解壓......");
      while ((nte = tis.getNextTarEntry()) != null) {
        String dir = unTarPath + File.separator + nte.getName();
        System.out.println("正在解壓......" + dir);
        FileOutputStream fos = null;
        BufferedOutputStream bos = null;
        try {
          if (nte.isDirectory()) {
            File file1 = new File(dir);
            file1.mkdirs();
          } else {
            File file2 = new File(dir);
            fos = new FileOutputStream(file2);
            bos = new BufferedOutputStream(fos);
            IOUtils.copy(tis, bos);
          }
        } catch (Exception e) {
          e.printStackTrace();
        } finally {
          if (bos != null) {
            bos.close();
          }
          if (fos != null) {
            fos.close();
          }
        }
      }
      System.out.println("解壓完成......");
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      if (tis != null) {
        tis.close();
      }
      if (fis != null) {
        fis.close();
      }
    }
  }
 
  public static boolean unCompress(String filePath,String unCompressPath) throws Exception {
    String fileType = filePath.toUpperCase();
    if(fileType.endsWith(".TAR")){
      System.out.println("解壓的.TAR包");
      //.TAR包用一般的FileInputStream流讀取
      unTar(new FileInputStream(filePath),unCompressPath);
    }
    else if(fileType.endsWith(".TAR.GZ")){
      System.out.println("解壓的.TAR.GZ包");
      //.TAR.GZ包要用GzipCompressorInputStream讀取
      unTar(new GzipCompressorInputStream(new FileInputStream(filePath)),unCompressPath);
    }
    else if(fileType.endsWith(".TAR.BZ2")){
      System.out.println("解壓的.TAR.BZ2包");
      unTar(new BZip2CompressorInputStream(new FileInputStream(filePath)),unCompressPath);
    }
    else if(fileType.endsWith(".ZIP")){
      System.out.println("解壓的.ZIP包");
      zipUnCompress(filePath,unCompressPath);
    }
    else{
      System.out.println("暫不支持該種格式文件的解壓");
    }
    return true;
  }
 
  public static void main(String[] args) throws Exception {
 
    unCompress("D:\\test\\zip\\nginx-1.18.0.rar","D:\\test\\zip");
 
  }
 
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://www.cnblogs.com/zhangzhiyong-/p/13233920.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久人人爽爽爽人久久久 | 一呦二呦三呦国产精品 | 久久一区 | 午夜爱爱毛片xxxx视频免费看 | 黄色片视频免费观看 | 欧美一区二区日韩一区二区 | 操操操干干 | 日韩精品一区在线视频 | 日本欧美在线 | 日韩一区电影 | 中文字幕日韩一区 | 亚洲污视频 | 日本天天操 | 色噜噜狠狠狠综合曰曰曰 | 九九香蕉视频 | 久久一区| 日本三级中文在线电影 | 羞羞网站在线观看 | 中文字幕电影在线观看 | 成人午夜精品久久久久久久3d | 欧美精品偷拍 | 久久国 | 国产精品毛片久久久久久 | 国产精品毛片无码 | 成人国产精品156免费观看 | 国偷自产一区二区免费视频 | 国产成人精品一区二区三区网站观看 | 999精品在线| av天天网 | 高清一区二区三区 | 麻豆产精国品免费 | 午夜国产视频 | 久久精品一区二区国产 | 日日干夜夜操 | 日本一区免费 | 久草电影在线观看 | 黄色影院在线观看 | 免费看的毛片 | 欧美一区二区三区视频 | 精品无码久久久久久国产 | 免费毛片网站 |