激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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

服務器之家 - 編程語言 - Android - Android實現zip文件壓縮及解壓縮的方法

Android實現zip文件壓縮及解壓縮的方法

2021-03-28 17:13華宰 Android

這篇文章主要介紹了Android實現zip文件壓縮及解壓縮的方法,涉及Android針對文件的遍歷及zip壓縮與解壓縮的實現技巧,具有一定參考借鑒價值,需要的朋友可以參考下

本文實例講述了Android實現zip文件壓縮解壓縮的方法。分享給大家供大家參考。具體如下:

DirTraversal.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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package com.once;
import java.io.File;
import java.util.ArrayList;
import java.util.LinkedList;
/**
 * 文件夾遍歷
 * @author once
 *
 */
public class DirTraversal {
  //no recursion
  public static LinkedList<File> listLinkedFiles(String strPath) {
    LinkedList<File> list = new LinkedList<File>();
    File dir = new File(strPath);
    File file[] = dir.listFiles();
    for (int i = 0; i < file.length; i++) {
      if (file[i].isDirectory())
        list.add(file[i]);
      else
        System.out.println(file[i].getAbsolutePath());
    }
    File tmp;
    while (!list.isEmpty()) {
      tmp = (File) list.removeFirst();
      if (tmp.isDirectory()) {
        file = tmp.listFiles();
        if (file == null)
          continue;
        for (int i = 0; i < file.length; i++) {
          if (file[i].isDirectory())
            list.add(file[i]);
          else
            System.out.println(file[i].getAbsolutePath());
        }
      } else {
        System.out.println(tmp.getAbsolutePath());
      }
    }
    return list;
  }
  //recursion
  public static ArrayList<File> listFiles(String strPath) {
    return refreshFileList(strPath);
  }
  public static ArrayList<File> refreshFileList(String strPath) {
    ArrayList<File> filelist = new ArrayList<File>();
    File dir = new File(strPath);
    File[] files = dir.listFiles();
    if (files == null)
      return null;
    for (int i = 0; i < files.length; i++) {
      if (files[i].isDirectory()) {
        refreshFileList(files[i].getAbsolutePath());
      } else {
        if(files[i].getName().toLowerCase().endsWith("zip"))
          filelist.add(files[i]);
      }
    }
    return filelist;
  }
}

ZipUtils.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
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
package com.once;
import java.io.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
/**
 * Java utils 實現的Zip工具
 *
 * @author once
 */
public class ZipUtils {
  private static final int BUFF_SIZE = 1024 * 1024; // 1M Byte
  /**
   * 批量壓縮文件(夾)
   *
   * @param resFileList 要壓縮的文件(夾)列表
   * @param zipFile 生成的壓縮文件
   * @throws IOException 當壓縮過程出錯時拋出
   */
  public static void zipFiles(Collection<File> resFileList, File zipFile) throws IOException {
    ZipOutputStream zipout = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(
        zipFile), BUFF_SIZE));
    for (File resFile : resFileList) {
      zipFile(resFile, zipout, "");
    }
    zipout.close();
  }
  /**
   * 批量壓縮文件(夾)
   *
   * @param resFileList 要壓縮的文件(夾)列表
   * @param zipFile 生成的壓縮文件
   * @param comment 壓縮文件的注釋
   * @throws IOException 當壓縮過程出錯時拋出
   */
  public static void zipFiles(Collection<File> resFileList, File zipFile, String comment)
      throws IOException {
    ZipOutputStream zipout = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(
        zipFile), BUFF_SIZE));
    for (File resFile : resFileList) {
      zipFile(resFile, zipout, "");
    }
    zipout.setComment(comment);
    zipout.close();
  }
  /**
   * 解壓縮一個文件
   *
   * @param zipFile 壓縮文件
   * @param folderPath 解壓縮的目標目錄
   * @throws IOException 當解壓縮過程出錯時拋出
   */
  public static void upZipFile(File zipFile, String folderPath) throws ZipException, IOException {
    File desDir = new File(folderPath);
    if (!desDir.exists()) {
      desDir.mkdirs();
    }
    ZipFile zf = new ZipFile(zipFile);
    for (Enumeration<?> entries = zf.entries(); entries.hasMoreElements();) {
      ZipEntry entry = ((ZipEntry)entries.nextElement());
      InputStream in = zf.getInputStream(entry);
      String str = folderPath + File.separator + entry.getName();
      str = new String(str.getBytes("8859_1"), "GB2312");
      File desFile = new File(str);
      if (!desFile.exists()) {
        File fileParentDir = desFile.getParentFile();
        if (!fileParentDir.exists()) {
          fileParentDir.mkdirs();
        }
        desFile.createNewFile();
      }
      OutputStream out = new FileOutputStream(desFile);
      byte buffer[] = new byte[BUFF_SIZE];
      int realLength;
      while ((realLength = in.read(buffer)) > 0) {
        out.write(buffer, 0, realLength);
      }
      in.close();
      out.close();
    }
  }
  /**
   * 解壓文件名包含傳入文字的文件
   *
   * @param zipFile 壓縮文件
   * @param folderPath 目標文件夾
   * @param nameContains 傳入的文件匹配名
   * @throws ZipException 壓縮格式有誤時拋出
   * @throws IOException IO錯誤時拋出
   */
  public static ArrayList<File> upZipSelectedFile(File zipFile, String folderPath,
      String nameContains) throws ZipException, IOException {
    ArrayList<File> fileList = new ArrayList<File>();
 
    File desDir = new File(folderPath);
    if (!desDir.exists()) {
      desDir.mkdir();
    }
    ZipFile zf = new ZipFile(zipFile);
    for (Enumeration<?> entries = zf.entries(); entries.hasMoreElements();) {
      ZipEntry entry = ((ZipEntry)entries.nextElement());
      if (entry.getName().contains(nameContains)) {
        InputStream in = zf.getInputStream(entry);
        String str = folderPath + File.separator + entry.getName();
        str = new String(str.getBytes("8859_1"), "GB2312");
        // str.getBytes("GB2312"),"8859_1" 輸出
        // str.getBytes("8859_1"),"GB2312" 輸入
        File desFile = new File(str);
        if (!desFile.exists()) {
          File fileParentDir = desFile.getParentFile();
          if (!fileParentDir.exists()) {
            fileParentDir.mkdirs();
          }
          desFile.createNewFile();
        }
        OutputStream out = new FileOutputStream(desFile);
        byte buffer[] = new byte[BUFF_SIZE];
        int realLength;
        while ((realLength = in.read(buffer)) > 0) {
          out.write(buffer, 0, realLength);
        }
        in.close();
        out.close();
        fileList.add(desFile);
      }
    }
    return fileList;
  }
  /**
   * 獲得壓縮文件內文件列表
   *
   * @param zipFile 壓縮文件
   * @return 壓縮文件內文件名稱
   * @throws ZipException 壓縮文件格式有誤時拋出
   * @throws IOException 當解壓縮過程出錯時拋出
   */
  public static ArrayList<String> getEntriesNames(File zipFile) throws ZipException, IOException {
    ArrayList<String> entryNames = new ArrayList<String>();
    Enumeration<?> entries = getEntriesEnumeration(zipFile);
    while (entries.hasMoreElements()) {
      ZipEntry entry = ((ZipEntry)entries.nextElement());
      entryNames.add(new String(getEntryName(entry).getBytes("GB2312"), "8859_1"));
    }
    return entryNames;
  }
  /**
   * 獲得壓縮文件內壓縮文件對象以取得其屬性
   *
   * @param zipFile 壓縮文件
   * @return 返回一個壓縮文件列表
   * @throws ZipException 壓縮文件格式有誤時拋出
   * @throws IOException IO操作有誤時拋出
   */
  public static Enumeration<?> getEntriesEnumeration(File zipFile) throws ZipException,
      IOException {
    ZipFile zf = new ZipFile(zipFile);
    return zf.entries();
  }
  /**
   * 取得壓縮文件對象的注釋
   *
   * @param entry 壓縮文件對象
   * @return 壓縮文件對象的注釋
   * @throws UnsupportedEncodingException
   */
  public static String getEntryComment(ZipEntry entry) throws UnsupportedEncodingException {
    return new String(entry.getComment().getBytes("GB2312"), "8859_1");
  }
  /**
   * 取得壓縮文件對象的名稱
   *
   * @param entry 壓縮文件對象
   * @return 壓縮文件對象的名稱
   * @throws UnsupportedEncodingException
   */
  public static String getEntryName(ZipEntry entry) throws UnsupportedEncodingException {
    return new String(entry.getName().getBytes("GB2312"), "8859_1");
  }
  /**
   * 壓縮文件
   *
   * @param resFile 需要壓縮的文件(夾)
   * @param zipout 壓縮的目的文件
   * @param rootpath 壓縮的文件路徑
   * @throws FileNotFoundException 找不到文件時拋出
   * @throws IOException 當壓縮過程出錯時拋出
   */
  private static void zipFile(File resFile, ZipOutputStream zipout, String rootpath)
      throws FileNotFoundException, IOException {
    rootpath = rootpath + (rootpath.trim().length() == 0 ? "" : File.separator)
        + resFile.getName();
    rootpath = new String(rootpath.getBytes("8859_1"), "GB2312");
    if (resFile.isDirectory()) {
      File[] fileList = resFile.listFiles();
      for (File file : fileList) {
        zipFile(file, zipout, rootpath);
      }
    } else {
      byte buffer[] = new byte[BUFF_SIZE];
      BufferedInputStream in = new BufferedInputStream(new FileInputStream(resFile),
          BUFF_SIZE);
      zipout.putNextEntry(new ZipEntry(rootpath));
      int realLength;
      while ((realLength = in.read(buffer)) != -1) {
        zipout.write(buffer, 0, realLength);
      }
      in.close();
      zipout.flush();
      zipout.closeEntry();
    }
  }
}

希望本文所述對大家的Android程序設計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美成人精品一区二区男人小说 | 亚洲国产网站 | 精品一区二区三区欧美 | 美女av在线免费观看 | 国产精品成人免费一区久久羞羞 | 日本成人一区 | 日本在线播放一区二区三区 | 一区免费 | 亚洲精品欧美 | 欧美福利视频一区二区三区 | 久久精精品 | 91久久夜色精品国产网站 | 久久精品一级 | 国产精品久久久毛片 | 中国av中文字幕 | 久久男 | 久草在线视频福利 | 一级做a爱片久久毛片a高清 | 久久久久久久久91 | 久久久国产一区二区三区 | 国产精品91久久久 | 欧美性videofree精品 | 99精品视频一区二区 | 久久av免费 | 久久综合精品视频 | 天堂成人一区二区三区 | 久在线播放 | 日韩区在线| 日韩视频一区二区 | 午夜精品老牛av一区二区三区 | 国产人成精品一区二区三 | 欧美一级黄色录像片 | 国产精品久久久久久模特 | 久久视频国产 | 三级国产三级在线 | 国产精品成人久久 | 欧美黄色小视频 | 久久精品黄 | av在线影片 | 99在线热播精品免费 | 中文字幕在线亚洲精品 |