Android压缩文件(压缩目录)

原文地址点击打开链接

在Android中我们很多时候需要进行压缩与解压缩,就如本人的[ 足球即时比分 ]应用中也用到过.需要将一些信息进行收集再进行压缩,最后将压缩文件上传到服务器中(如何上传将文件上传到服务器中可以看我另一篇帖子 :[ Android上传文件到服务器 ]).


  以下我的使用到的工具类的代码.需要注意的是,进行压缩与解压缩都不支持中文名,如果需要支持中文名的话,一般是使用 Ant中的ZipInputStream与ZipOutStream,由于手机上使用ant的jar包的话,会令应用或游戏的大小变大很多,所以尽量小引入其它第三方的jar包的.

package rbase.app.nowscore.util;import java.io.InputStream;/**
* Android Zip压缩解压缩
* @author ronald ([url]www.r-base.net[/url])
*/
public final class ZipUtil {private ZipUtil(){}/*** 取得压缩包中的 文件列表(文件夹,文件自选)* @param zipFileString                压缩包名字* @param bContainFolder        是否包括 文件夹* @param bContainFile                是否包括 文件* @return* @throws Exception*/public static java.util.List getFileList(String zipFileString, boolean bContainFolder, boolean bContainFile)throws Exception {java.util.List fileList = new java.util.ArrayList();java.util.zip.ZipInputStream inZip = new java.util.zip.ZipInputStream(new java.io.FileInputStream(zipFileString));java.util.zip.ZipEntry zipEntry;String szName = "";                while ((zipEntry = inZip.getNextEntry()) != null) {szName = zipEntry.getName();if (zipEntry.isDirectory()) {// get the folder name of the widgetszName = szName.substring(0, szName.length() - 1);java.io.File folder = new java.io.File(szName);if (bContainFolder) {fileList.add(folder);}} else {java.io.File file = new java.io.File(szName);if (bContainFile) {fileList.add(file);}}}//end of while                inZip.close();return fileList;}/*** 返回压缩包中的文件InputStream* * @param zipFilePath                压缩文件的名字* @param fileString        解压文件的名字* @return InputStream* @throws Exception*/
public static java.io.InputStream upZip(String zipFilePath, String fileString)throws Exception {java.util.zip.ZipFile zipFile = new java.util.zip.ZipFile(zipFilePath);java.util.zip.ZipEntry zipEntry = zipFile.getEntry(fileString);return zipFile.getInputStream(zipEntry);
}/**
* 解压一个压缩文档 到指定位置
* @param zipFileString        压缩包的名字
* @param outPathString        指定的路径
* @throws Exception
*/
public static void unZipFolder(InputStream input, String outPathString)throws Exception {java.util.zip.ZipInputStream inZip = new java.util.zip.ZipInputStream(input);java.util.zip.ZipEntry zipEntry = null;String szName = "";while ((zipEntry = inZip.getNextEntry()) != null) {szName = zipEntry.getName();if (zipEntry.isDirectory()) {// get the folder name of the widgetszName = szName.substring(0, szName.length() - 1);java.io.File folder = new java.io.File(outPathString + java.io.File.separator + szName);folder.mkdirs();} else {java.io.File file = new java.io.File(outPathString + java.io.File.separator + szName);file.createNewFile();// get the output stream of the filejava.io.FileOutputStream out = new java.io.FileOutputStream(file);int len;byte[] buffer = new byte[1024];// read (len) bytes into bufferwhile ((len = inZip.read(buffer)) != -1) {// write (len) byte from buffer at the position 0out.write(buffer, 0, len);out.flush();}out.close();}}//end of whileinZip.close();}/*** 解压一个压缩文档 到指定位置* @param zipFileString        压缩包的名字* @param outPathString        指定的路径* @throws Exception*/public static void unZipFolder(String zipFileString, String outPathString)throws Exception {unZipFolder(new java.io.FileInputStream(zipFileString),outPathString);}//end of func/*** 压缩文件,文件夹* * @param srcFilePath        要压缩的文件/文件夹名字* @param zipFilePath        指定压缩的目的和名字* @throws Exception*/public static void zipFolder(String srcFilePath, String zipFilePath)throws Exception {//创建Zip包java.util.zip.ZipOutputStream outZip = new java.util.zip.ZipOutputStream(new java.io.FileOutputStream(zipFilePath));//打开要输出的文件java.io.File file = new java.io.File(srcFilePath);//压缩zipFiles(file.getParent()+java.io.File.separator, file.getName(), outZip);//完成,关闭outZip.finish();outZip.close();}//end of func/*** 压缩文件* @param folderPath* @param filePath* @param zipOut* @throws Exception*/private static void zipFiles(String folderPath, String filePath, java.util.zip.ZipOutputStream zipOut)throws Exception{if(zipOut == null){return;}java.io.File file = new java.io.File(folderPath+filePath);//判断是不是文件if (file.isFile()) {java.util.zip.ZipEntry zipEntry =  new java.util.zip.ZipEntry(filePath);java.io.FileInputStream inputStream = new java.io.FileInputStream(file);zipOut.putNextEntry(zipEntry);int len;byte[] buffer = new byte[4096];while((len=inputStream.read(buffer)) != -1) {zipOut.write(buffer, 0, len);}zipOut.closeEntry();} else {//文件夹的方式,获取文件夹下的子文件String fileList[] = file.list();//如果没有子文件, 则添加进去即可if (fileList.length <= 0) {java.util.zip.ZipEntry zipEntry =  new java.util.zip.ZipEntry(filePath+java.io.File.separator);zipOut.putNextEntry(zipEntry);zipOut.closeEntry();                                }//如果有子文件, 遍历子文件for (int i = 0; i < fileList.length; i++) {zipFiles(folderPath, filePath+java.io.File.separator+fileList[i], zipOut);}//end of for}//end of if}//end of func
}



本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部