How to compress and decompress files in Android

  • 2021-07-18 09:04:24
  • OfStack

Needless to say, post java code directly to everyone. The specific code is as follows:

Java code


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 
/**
*  Batch compressed files (folders) 
* 
* @param resFileList
*  List of files (folders) to compress 
* @param zipFile
*  Generated compressed file 
* @throws IOException
*  Thrown when there is an error in the compression process 
*/ 
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(); 
} 
} 
/**
*  Batch compressed files (folders) 
* 
* @param resFileList
*  List of files (folders) to compress 
* @param zipFile
*  Generated compressed file 
* @param comment
*  Comments on compressed files 
* @throws IOException
*  Thrown when there is an error in the compression process 
*/ 
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(); 
} 
} 
/**
*  Decompression 1 Files 
* 
* @param zipFile
*  Zip file 
* @param folderPath
*  Extracted target directory 
* @throws IOException
*  Thrown when an error occurs in the decompression process 
*/ 
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(); 
} 
} 
/**
*  Unzip a file whose name contains the incoming text 
* 
* @param zipFile
*  Zip file 
* @param folderPath
*  Destination folder 
* @param nameContains
*  File matching name passed in 
* @throws ZipException
*  Thrown when the compression format is incorrect 
* @throws IOException
* IO Thrown when an error occurs 
*/ 
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"  Output  
// str.getBytes("8859_1"),AppConstans.UTF_8  Input  
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; 
} 
/**
*  Get the list of files in the compressed file 
* 
* @param zipFile
*  Zip file 
* @return  File name in compressed file 
* @throws ZipException
*  Thrown when the compressed file format is incorrect 
* @throws IOException
*  Thrown when an error occurs in the decompression process 
*/ 
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; 
} 
/**
*  Get the zip file object within the zip file to get its properties 
* 
* @param zipFile
*  Zip file 
* @return  Return 1 List of compressed files 
* @throws ZipException
*  Thrown when the compressed file format is incorrect 
* @throws IOException
* IO Thrown when the operation is incorrect 
*/ 
public static Enumeration<?> getEntriesEnumeration(File zipFile) throws ZipException, IOException { 
ZipFile zf = new ZipFile(zipFile); 
return zf.entries(); 
} 
/**
*  Gets the comment for the zip file object 
* 
* @param entry
*  Compressed file object 
* @return  Comments on zip file objects 
* @throws UnsupportedEncodingException
*/ 
public static String getEntryComment(ZipEntry entry) throws UnsupportedEncodingException { 
return new String(entry.getComment().getBytes(HTTP.UTF_8), "8859_1"); 
} 
/**
*  Gets the name of the zip file object 
* 
* @param entry
*  Compressed file object 
* @return  The name of the zip file object 
* @throws UnsupportedEncodingException
*/ 
public static String getEntryName(ZipEntry entry) throws UnsupportedEncodingException { 
return new String(entry.getName().getBytes(HTTP.UTF_8), "8859_1"); 
} 
/**
*  Zip file 
* 
* @param resFile
*  Files (folders) to be compressed 
* @param zipout
*  Compressed destination file 
* @param rootpath
*  Compressed file path 
* @throws FileNotFoundException
*  Thrown when the file cannot be found 
* @throws IOException
*  Thrown when there is an error in the compression process 
*/ 
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(); 
} 
} 
} 

This is the end of the code, about Android compression and decompression of the full content of the file to give you so much, I hope to help you!


Related articles: