最近作的一個Android項目中,須要將一個有20W份html文件的壓縮包下載到本地,解壓後在本地瀏覽;在解壓的時候嘗試了不少方法都沒法完成解壓(文件數量太大,要麼解壓超慢要麼就內存溢出程序崩潰),後來放棄解壓,直接從壓縮包中讀取文件,下面將方法整理以下html
經過ZipFile.getEntry(「文件名」)
方法獲取來獲取壓縮包中的指定文件對象app
public static void readZipFile(String file,String fileName) throws Exception { ZipFile zf = new ZipFile(file); ZipEntry ze = zf.getEntry(fileName); InputStream in = zf.getInputStream(ze); BufferedReader br = new BufferedReader(new InputStreamReader(in)); String line; StringBuffer result = new StringBuffer(); while ((line = br.readLine()) != null) { result.append(line+"\n"); } System.out.println(result); }
在上面的方法中,只要指定壓縮包路徑(file)以及壓縮包中指定的文件名稱(fileName),就能夠讀取到該html文件中的內容;code
接下來咱們對上面的方法進行改造,將指定文件從壓縮包中讀取出來並寫入到指定的目錄下,以便於在Android項目中進行查看htm
/** * * @param file 壓縮包路徑 * @param saveRootDirectory 寫入文件夾路徑 * @param fileName 文件名 * @throws FileNotFoundException * @throws IOException */ public static void writeZipFile(String file,String saveRootDirectory,String fileName) throws FileNotFoundException, IOException { int len = 0; ZipFile zf = new ZipFile(file); ZipEntry ze = zf.getEntry(fileName); InputStream read = zf.getInputStream(ze); File writeFile = new File(saveRootDirectory + fileName); if (!writeFile.exists()) { File rootDirectoryFile = new File(saveRootDirectory); //建立目錄 if (!rootDirectoryFile.exists()) { rootDirectoryFile.mkdirs(); } //建立文件 writeFile.createNewFile(); BufferedOutputStream write = new BufferedOutputStream(new FileOutputStream(file)); //寫入文件內容 while ((len = read.read()) != -1) { write.write(len); } write.flush(); write.close(); } read.close(); }
調用writeZipFile
方法,將指定的文件(fileName)從壓縮包(file)中讀取出來後並寫入到指定的文件夾(saveRootDirectory)下,經過WebView.loadUrl("file:///saveRootDirectory/fileName")
實現html文件的查看,經過這種方式,咱們避免了在移動端解壓大文件時長時間的等待、甚至是致使程序崩潰這種很差的用戶體驗,須要查看某個文件從壓縮包中讀取便可。對象