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


最近做的一個Android項目中,需要將一個有20W份html文件的壓縮包下載到本地,解壓后在本地瀏覽;在解壓的時候嘗試了很多方法都無法完成解壓(文件數量太大,要么解壓超慢要么就內存溢出程序崩潰),后來放棄解壓,直接從壓縮包中讀取文件,下面將方法整理如下


  • 通過ZipFile.getEntry(“文件名”)方法獲取來獲取壓縮包中的指定文件對象

    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文件中的內容

  • 接下來我們對上面的方法進行改造,將指定文件從壓縮包中讀取出來並寫入到指定的目錄下,以便於在Android項目中進行查看

    /** * * @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文件的查看,通過這種方式,我們避免了在移動端解壓大文件時長時間的等待、甚至是導致程序崩潰這種不好的用戶體驗,需要查看某個文件從壓縮包中讀取即可。







免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM