Android压缩文件(压缩目录)
生活随笔
收集整理的這篇文章主要介紹了
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<java.io.File> getFileList(String zipFileString, boolean bContainFolder, boolean bContainFile)throws Exception {java.util.List<java.io.File> fileList = new java.util.ArrayList<java.io.File>();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 }總結
以上是生活随笔為你收集整理的Android压缩文件(压缩目录)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 非织物类墙布有什么特点?
- 下一篇: 大理石方柱价格?