zoukankan      html  css  js  c++  java
  • 不解压直接读取压缩包中的文件

    最近做的一个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+"
      ");
          }
          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文件的查看,通过这种方式,我们避免了在移动端解压大文件时长时间的等待、甚至是导致程序崩溃这种不好的用户体验,需要查看某个文件从压缩包中读取即可。






  • 相关阅读:
    object-c iOS 教程 git for mac
    mac Git本地服务器配置
    [转]XCode中修改缺省公司名称/开发人员名称
    IOS------Warning
    Linux---CentOS 定时运行脚本配置练手
    微信公众号一些错误的原因错误代码41001
    微信支付的一些新的经验总结
    关于THINKPHP5模型关联的初步理解
    写下thinkphp5和thinkphp3.2的不同
    练手THINKPHP5过程和bootstrap3.3.7
  • 原文地址:https://www.cnblogs.com/jeffen/p/6931199.html
Copyright © 2011-2022 走看看