Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android -- 壓縮與解壓文件

Android -- 壓縮與解壓文件

編輯:關於Android編程

我在做一個項目中,工程文件中有一個功能需要很多圖片,圖片與app一起打包下來的話有30+M,那麼我們就考慮另外下載壓縮包,我們將圖片取出,工程就只有4+M了,哈哈哈哈,呵呵,真恐怖。那麼這樣就涉及到另外下載壓縮包,以及壓縮包的解壓。   java的工具類裡面也包含的有對zip的處理。   代碼實現                                                                                         復制代碼 public class Util {     public static final String ZIP_FILENAME = "/data/data/com.yydcdut.unzip/new_ios_7_icons_by_sunkotora-d68qbmo.zip";//需要解壓縮的文件名       public static final String ZIP_DIR = "/data/data/com.yydcdut.unzip/";//需要壓縮的文件夾       public static final String UN_ZIP_DIR = "/data/data/com.yydcdut.unzip/zzip/";//要解壓的文件目錄       //上面兩個變量好像說反了。     public static final int BUFFER = 1024 ;//緩存大小         /**       * zip壓縮功能.       * 壓縮baseDir(文件夾目錄)下所有文件,包括子目錄       * @throws Exception       */       public static void zipFile(String baseDir,String fileName) throws Exception{           List fileList=getSubFiles(new File(baseDir));           ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(fileName));           ZipEntry ze=null;           byte[] buf=new byte[BUFFER];           int readLen=0;           for(int i = 0; i <fileList.size(); i++) {               File f=(File)fileList.get(i);               ze=new ZipEntry(getAbsFileName(baseDir, f));               ze.setSize(f.length());               ze.setTime(f.lastModified());                  zos.putNextEntry(ze);               InputStream is=new BufferedInputStream(new FileInputStream(f));               while ((readLen=is.read(buf, 0, BUFFER))!=-1) {                   zos.write(buf, 0, readLen);               }               is.close();           }           zos.close();       }         /**       * 給定根目錄,返回另一個文件名的相對路徑,用於zip文件中的路徑.       * @param baseDir java.lang.String 根目錄       * @param realFileName java.io.File 實際的文件名       * @return 相對文件名       */       private static String getAbsFileName(String baseDir, File realFileName){           File real=realFileName;           File base=new File(baseDir);           String ret=real.getName();           while (true) {               real=real.getParentFile();               if(real==null)                    break;               if(real.equals(base))                    break;               else                   ret=real.getName()+"/"+ret;           }           return ret;       }         /**       * 取得指定目錄下的所有文件列表,包括子目錄.       * @param baseDir File 指定的目錄       * @return 包含java.io.File的List       */       private static List getSubFiles(File baseDir){           List ret=new ArrayList();           File[] tmp=baseDir.listFiles();           for (int i = 0; i <tmp.length; i++) {               if(tmp[i].isFile())                   ret.add(tmp[i]);               if(tmp[i].isDirectory())                   ret.addAll(getSubFiles(tmp[i]));           }           return ret;       }         /**       * 解壓縮功能.       * 將ZIP_FILENAME文件解壓到ZIP_DIR目錄下.       * @throws Exception       */       public static void upZipFile() throws Exception{           ZipFile zfile=new ZipFile(ZIP_FILENAME);           Enumeration zList=zfile.entries();           ZipEntry ze=null;           byte[] buf=new byte[1024];           while(zList.hasMoreElements()){               ze=(ZipEntry)zList.nextElement();                      if(ze.isDirectory()){                   File f=new File(ZIP_DIR+ze.getName());                   f.mkdir();                   continue;               }               OutputStream os=new BufferedOutputStream(new FileOutputStream(getRealFileName(ZIP_DIR, ze.getName())));               InputStream is=new BufferedInputStream(zfile.getInputStream(ze));               int readLen=0;               while ((readLen=is.read(buf, 0, 1024))!=-1) {                   os.write(buf, 0, readLen);               }               is.close();               os.close();            }           zfile.close();       }         /**       * 給定根目錄,返回一個相對路徑所對應的實際文件名.       * @param baseDir 指定根目錄       * @param absFileName 相對路徑名,來自於ZipEntry中的name       * @return java.io.File 實際的文件       */       public static File getRealFileName(String baseDir, String absFileName){           String[] dirs=absFileName.split("/");           File ret=new File(baseDir);           if(dirs.length>1){               for (int i = 0; i < dirs.length-1;i++) {                   ret=new File(ret, dirs[i]);               }               if(!ret.exists())                   ret.mkdirs();               ret=new File(ret, dirs[dirs.length-1]);               return ret;           }           return ret;       }   } 復制代碼 代碼分析                                                                                       先說解壓,用ZipFile實例化壓縮文件,接下來對ZipFile進行處理。列舉出ZipFile中的元素,在用IO操作將ZipFile中的元素轉化成文件,如果是目錄,則創建目錄繼續操作。   壓縮,運用ZipOutputStream將文件轉成IO輸出流,再BufferedInputStream輸入流寫入進去。
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved