欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android如何實現(xiàn)壓縮和解壓縮文件

 更新時間:2016年05月27日 14:35:00   投稿:mrr  
這篇文章主要介紹了Android實現(xiàn)壓縮和解壓文件的實例代碼,涉及到批量壓縮文件夾,解壓縮一個文件等方面的知識點,本文介紹的非常詳細,具有參考借鑒價值,感興趣的朋友一起看下吧

廢話不多說了,直接給大家貼java代碼了,具體代碼如下所示:

Java代碼

package com.maidong.utils; 
import java.io.BufferedInputStream; 
import java.io.BufferedOutputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.io.UnsupportedEncodingException; 
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; 
import org.apache.http.protocol.HTTP; 
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 = null; 
try { 
zipout = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFile), BUFF_SIZE)); 
for (File resFile : resFileList) { 
zipFile(resFile, zipout, ""); 
} 
} finally { 
if (zipout != null) 
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 = null; 
try { 
zipout = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFile), BUFF_SIZE)); 
for (File resFile : resFileList) { 
zipFile(resFile, zipout, ""); 
} 
zipout.setComment(comment); 
} finally { 
if (zipout != null) 
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); 
InputStream in = null; 
OutputStream out = null; 
try { 
for (Enumeration<?> entries = zf.entries(); entries.hasMoreElements();) { 
ZipEntry entry = ((ZipEntry) entries.nextElement()); 
in = zf.getInputStream(entry); 
String str = folderPath + File.separator + entry.getName(); 
str = new String(str.getBytes("8859_1"), HTTP.UTF_8); 
File desFile = new File(str); 
if (!desFile.exists()) { 
File fileParentDir = desFile.getParentFile(); 
if (!fileParentDir.exists()) { 
fileParentDir.mkdirs(); 
} 
desFile.createNewFile(); 
} 
out = new FileOutputStream(desFile); 
byte buffer[] = new byte[BUFF_SIZE]; 
int realLength; 
while ((realLength = in.read(buffer)) > 0) { 
out.write(buffer, 0, realLength); 
} 
} 
} finally { 
if (in != null) 
in.close(); 
if (out != null) 
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); 
InputStream in = null; 
OutputStream out = null; 
try { 
for (Enumeration<?> entries = zf.entries(); entries.hasMoreElements();) { 
ZipEntry entry = ((ZipEntry) entries.nextElement()); 
if (entry.getName().contains(nameContains)) { 
in = zf.getInputStream(entry); 
String str = folderPath + File.separator + entry.getName(); 
str = new String(str.getBytes("8859_1"), HTTP.UTF_8); 
// str.getBytes(AppConstans.UTF_8),"8859_1" 輸出 
// str.getBytes("8859_1"),AppConstans.UTF_8 輸入 
File desFile = new File(str); 
if (!desFile.exists()) { 
File fileParentDir = desFile.getParentFile(); 
if (!fileParentDir.exists()) { 
fileParentDir.mkdirs(); 
} 
desFile.createNewFile(); 
} 
out = new FileOutputStream(desFile); 
byte buffer[] = new byte[BUFF_SIZE]; 
int realLength; 
while ((realLength = in.read(buffer)) > 0) { 
out.write(buffer, 0, realLength); 
} 
fileList.add(desFile); 
} 
} 
} finally { 
if (in != null) 
in.close(); 
if (out != null) 
out.close(); 
} 
return fileList; 
} 
/**
* 獲得壓縮文件內(nèi)文件列表
* 
* @param zipFile
* 壓縮文件
* @return 壓縮文件內(nèi)文件名稱
* @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(HTTP.UTF_8), "8859_1")); 
} 
return entryNames; 
} 
/**
* 獲得壓縮文件內(nèi)壓縮文件對象以取得其屬性
* 
* @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(HTTP.UTF_8), "8859_1"); 
} 
/**
* 取得壓縮文件對象的名稱
* 
* @param entry
* 壓縮文件對象
* @return 壓縮文件對象的名稱
* @throws UnsupportedEncodingException
*/ 
public static String getEntryName(ZipEntry entry) throws UnsupportedEncodingException { 
return new String(entry.getName().getBytes(HTTP.UTF_8), "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"), HTTP.UTF_8); 
BufferedInputStream in = null; 
try { 
if (resFile.isDirectory()) { 
File[] fileList = resFile.listFiles(); 
for (File file : fileList) { 
zipFile(file, zipout, rootpath); 
} 
} else { 
byte buffer[] = new byte[BUFF_SIZE]; 
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(); 
} 
} finally { 
if (in != null) 
in.close(); 
// if (zipout != null); 
// zipout.close(); 
} 
} 
} 

代碼到此結(jié)束,關(guān)于Android實現(xiàn)壓縮和解壓縮文件的全內(nèi)容就給大家介紹這么多,希望能夠幫助到大家!

相關(guān)文章

  • Android一行代碼實現(xiàn)圓形頭像

    Android一行代碼實現(xiàn)圓形頭像

    本篇文章主要介紹了Android一行代碼實現(xiàn)圓形頭像的相關(guān)知識,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-05-05
  • Android實現(xiàn)狀態(tài)欄和虛擬按鍵背景顏色的變化實例代碼詳解

    Android實現(xiàn)狀態(tài)欄和虛擬按鍵背景顏色的變化實例代碼詳解

    今天介紹一下,我在項目開發(fā)過程中,實現(xiàn)狀態(tài)欄和虛擬按鍵背景顏色變化的方法,實現(xiàn)方式是,通過隱藏系統(tǒng)的狀態(tài)欄和虛擬按鍵的背景,實現(xiàn)圖片和背景顯示到狀態(tài)欄和虛擬按鍵下方,需要的朋友可以參考下
    2019-05-05
  • 解決Android studio 3.6.1 出現(xiàn)Cause: unable to find valid certification path to requested target 報錯的問題

    解決Android studio 3.6.1 出現(xiàn)Cause: unable to find valid certifi

    這篇文章主要介紹了Android studio 3.6.1 出現(xiàn)Cause: unable to find valid certification path to requested target 報錯的問題及解決方法,需要的朋友可以參考下
    2020-03-03
  • Android開發(fā)筆記XML數(shù)據(jù)解析方法及優(yōu)缺點

    Android開發(fā)筆記XML數(shù)據(jù)解析方法及優(yōu)缺點

    XML數(shù)據(jù)是一種常見的數(shù)據(jù)格式,Android開發(fā)中需要對其進行解析。常用的XML解析方式有DOM、SAX、Pull和Json等,每種方式都有其優(yōu)缺點。開發(fā)者可以根據(jù)具體需求選擇合適的解析方式,提高數(shù)據(jù)解析效率和性能
    2023-05-05
  • Android自定義View仿QQ運動步數(shù)效果

    Android自定義View仿QQ運動步數(shù)效果

    這篇文章主要為大家詳細介紹了Android自定義View仿QQ運動步數(shù)效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • Android實現(xiàn)圓角ListView效果

    Android實現(xiàn)圓角ListView效果

    這篇文章主要為大家詳細介紹了Android實現(xiàn)圓角ListView效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • Android NotificationManager簡單使用詳解

    Android NotificationManager簡單使用詳解

    這篇文章主要為大家詳細介紹了Android NotificationManager的簡單使用,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Android HttpURLConnection下載網(wǎng)絡(luò)圖片設(shè)置系統(tǒng)壁紙

    Android HttpURLConnection下載網(wǎng)絡(luò)圖片設(shè)置系統(tǒng)壁紙

    這篇文章主要為大家詳細介紹了Android HttpURLConnection下載網(wǎng)絡(luò)圖片設(shè)置系統(tǒng)壁紙,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • 用AdapterViewFlipper輕松完成圖片輪播

    用AdapterViewFlipper輕松完成圖片輪播

    這篇文章主要介紹了如何用AdapterViewFlipper完成圖片輪播,幫助大家更好的理解和學習使用AdapterViewFlipper,感興趣的朋友可以了解下
    2021-04-04
  • 使用Flutter開發(fā)一個圖片UI組件的代碼示例

    使用Flutter開發(fā)一個圖片UI組件的代碼示例

    在移動應(yīng)用開發(fā)中,圖片展示是一個常見的需求,為了滿足不同場景的圖片展示需求,我們可以開發(fā)一個靈活配置的圖片UI組件,本文將介紹如何使用Flutter開發(fā)一個圖片UI組件,并提供了豐富的配置選項,需要的朋友可以參考下
    2023-09-09

最新評論