不解壓直接讀取壓縮包中的文件

最近作的一個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文件的查看,經過這種方式,咱們避免了在移動端解壓大文件時長時間的等待、甚至是致使程序崩潰這種很差的用戶體驗,須要查看某個文件從壓縮包中讀取便可。對象

相關文章
相關標籤/搜索