Android压缩文件(压缩目录)
来源:互联网 发布:java优秀开源项目 编辑:程序博客网 时间:2024/05/22 13:49
原文地址点击打开链接
在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 widget szName = 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 widget szName = 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 file java.io.FileOutputStream out = new java.io.FileOutputStream(file); int len; byte[] buffer = new byte[1024]; // read (len) bytes into buffer while ((len = inZip.read(buffer)) != -1) { // write (len) byte from buffer at the position 0 out.write(buffer, 0, len); out.flush(); } out.close(); } }//end of while inZip.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}
0 0
- Android压缩文件(压缩目录)
- Android压缩文件(压缩目录)
- Android Gzip压缩和解压缩文件
- c# 压缩文件、压缩多级目录及解压
- SharpZipLib 压缩多个文件去掉压缩文件中的目录文件夹
- 找到目录下的文件夹 并且进行压缩,然后再生成压缩文件到指定目录
- 压缩和解压缩文件
- 压缩文件的压缩原理
- .net 压缩文件 SharpZipLib压缩
- 压缩和解压缩文件
- Unity3D压缩和解压缩文件
- ZipArchive压缩和解压缩文件
- Linux压缩和解压缩文件
- Linux压缩和解压缩文件
- java 将文件/目录下 zip压缩文件解压并删除压缩包
- Android 压缩文件
- 压缩文件和目录
- java压缩文件目录
- CSS平铺背景图片实现百分比图表
- 代码整洁之道
- MyEclipse启动后,server出显空指针异常问题
- 低功耗蓝牙4.0BLE编程-nrf51822开发(11)-蓝牙串口代码分析
- android.net.wifi简单介绍
- Android压缩文件(压缩目录)
- F5域名解析过程
- 解决Ubuntu系统中文乱码显示问题
- Cocos2d-x多场景切换生命周期
- iOS 日期加一天算法
- Caffe 编译安装
- jmeter 使用分布式压力测试配置
- 安卓常用第三方工具
- main cannot be resolved or is not a field