资讯专栏INFORMATION COLUMN

不解压直接读取压缩包中的文件

用户83 / 2190人阅读

摘要:最近做的一个项目中,需要将一个有份文件的压缩包下载到本地,解压后在本地浏览在解压的时候尝试了很多方法都无法完成解压文件数量太大,要么解压超慢要么就内存溢出程序崩溃,后来放弃解压,直接从压缩包中读取文件,下面将方法整理如下通过文件名方法获取来

  

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/12322.html

相关文章

  • Android 安全开发之 ZIP 文件目录遍历

    摘要:阿里聚安全的应用漏洞扫描服务,可以检测出应用的文件目录遍历风险。阿里聚安全对开发者建议对重要的压缩包文件进行数字签名校验,校验通过才进行解压。 1、ZIP文件目录遍历简介 因为ZIP压缩包文件中允许存在../的字符串,攻击者可以利用多个../在解压时改变ZIP包中某个文件的存放位置,覆盖掉应用原有的文件。如果被覆盖掉的文件是动态链接so、dex或者odex文件,轻则产生本地拒绝服务漏洞...

    sorra 评论0 收藏0
  • Android 安全开发之 ZIP 文件目录遍历

    摘要:阿里聚安全的应用漏洞扫描服务,可以检测出应用的文件目录遍历风险。阿里聚安全对开发者建议对重要的压缩包文件进行数字签名校验,校验通过才进行解压。 1、ZIP文件目录遍历简介 因为ZIP压缩包文件中允许存在../的字符串,攻击者可以利用多个../在解压时改变ZIP包中某个文件的存放位置,覆盖掉应用原有的文件。如果被覆盖掉的文件是动态链接so、dex或者odex文件,轻则产生本地拒绝服务漏洞...

    kbyyd24 评论0 收藏0
  • PHP 实现压缩解压操作

    摘要:在中,有时我们需要使用到压缩文件操作,压缩文件可以节省磁盘空间且压缩文件更小,便于网络传输,效率高,下面我们就来了解的压缩解压相关操作在中有一个类,专门用于文件的压缩解压相关操作在类中主要使用到了如下方法打开一个压缩包文件第一个参数要打开 在php中,有时我们需要使用到压缩文件操作,压缩文件可以节省磁盘空间;且压缩文件更小,便于网络传输,效率高,下面我们就来了解php的压缩解压相关操作...

    Lorry_Lu 评论0 收藏0
  • tar详解

    摘要:下面的参数是根据需要在压缩或解压档案时可选的。是表示产生新的包,指定包的文件名。这条命令是更新原来包中文件,是表示更新文件的意思。 写在前面 原文:tar解压缩命令 tar -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。...

    yiliang 评论0 收藏0
  • tar详解

    摘要:下面的参数是根据需要在压缩或解压档案时可选的。是表示产生新的包,指定包的文件名。这条命令是更新原来包中文件,是表示更新文件的意思。 写在前面 原文:tar解压缩命令 tar -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。...

    苏丹 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<