当前位置: 代码迷 >> Android >> Android压缩文件(压缩索引)
  详细解决方案

Android压缩文件(压缩索引)

热度:62   发布时间:2016-05-01 17:26:08.0
Android压缩文件(压缩目录)

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

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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
package rbase.app.nowscore.util;?import java.io.InputStream;?/** * Android Zip压缩解压缩 * @author ronald (www.r-base.net) */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}

?

文件下载 : ZipUtil.java.zip

?

?

?

转载请注明转自 : http://www.r-base.net/archives/404

  相关解决方案