精华内容
下载资源
问答
  • 传入一组文件,将文件列表打包为ZIP文件,传入ZIP文件文件压缩到一个指定文件夹,下面是这个实例的实现使用到了ANT的工具类,所以要引入ant.jar文件到工程中对于压缩建立一个工具类:package com.xidian.commmon...

    传入一组文件,将文件列表打包为ZIP文件,传入ZIP文件将文件解压缩到一个指定文件夹,下面是这个实例的实现

    使用到了ANT的工具类,所以要引入ant.jar文件到工程中

    对于压缩建立一个工具类:

    package com.xidian.commmon;

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.FileOutputStream;

    import java.io.OutputStream;

    import java.util.zip.ZipOutputStream;

    import org.apache.tools.zip.ZipEntry;

    /**

    * ZIP操作工具类

    * @说明 注意引入ant.jar文件

    * @author cuisuqiang

    * @version 1.0

    * @since

    */

    public class Zip {

    /**

    * 压缩文件列表到某ZIP文件

    * @param zipFilename 要压缩到的ZIP文件

    * @param paths 文件列表,多参数

    * @throws Exception

    */

    public static void compress(String zipFilename, String... paths)

    throws Exception {

    compress(new FileOutputStream(zipFilename), paths);

    }

    /**

    * 压缩文件列表到输出流

    * @param os 要压缩到的流

    * @param paths 文件列表,多参数

    * @throws Exception

    */

    public static void compress(OutputStream os, String... paths)

    throws Exception {

    ZipOutputStream zos = new ZipOutputStream(os);

    for (String path : paths) {

    if (path.equals(""))

    continue;

    java.io.File file = new java.io.File(path);

    if (file.exists()) {

    if (file.isDirectory()) {

    zipDirectory(zos, file.getPath(), file.getName()

    + File.separator);

    } else {

    zipFile(zos, file.getPath(), "");

    }

    }

    }

    zos.close();

    }

    private static void zipDirectory(ZipOutputStream zos, String dirName,

    String basePath) throws Exception {

    File dir = new File(dirName);

    if (dir.exists()) {

    File files[] = dir.listFiles();

    if (files.length > 0) {

    for (File file : files) {

    if (file.isDirectory()) {

    zipDirectory(zos, file.getPath(), basePath

    + file.getName().substring(

    file.getName().lastIndexOf(

    File.separator) + 1)

    + File.separator);

    } else

    zipFile(zos, file.getPath(), basePath);

    }

    } else {

    ZipEntry ze = new ZipEntry(basePath);

    zos.putNextEntry(ze);

    }

    }

    }

    private static void zipFile(ZipOutputStream zos, String filename,

    String basePath) throws Exception {

    File file = new File(filename);

    if (file.exists()) {

    FileInputStream fis = new FileInputStream(filename);

    ZipEntry ze = new ZipEntry(basePath + file.getName());

    zos.putNextEntry(ze);

    byte[] buffer = new byte[8192];

    int count = 0;

    while ((count = fis.read(buffer)) > 0) {

    zos.write(buffer, 0, count);

    }

    fis.close();

    }

    }

    }

    String... paths 是传入的文件列表,输出流可以穿文件流也可以传文件路径名称

    压缩一组文件:

    package com.xidian.test;

    import java.io.FileOutputStream;

    import com.xidian.commmon.Zip;

    /**

    * 压缩文件

    * @说明

    * @author cuisuqiang

    * @version 1.0

    * @since

    */

    public class TestCompress {

    public static void main(String[] args) {

    // 要压缩的文件列表

    String path01 = "C:\\a";

    String path02 = "C:\\test.txt";

    try {

    FileOutputStream os = new FileOutputStream("C:\\a.zip"); // 输出的ZIP文件流

    Zip.compress(os, path01, path02);

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    }

    由于已经写了工具类,调用看起来非常清晰

    解压这个压缩包:

    package com.xidian.test;

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.FileOutputStream;

    import java.util.ArrayList;

    import java.util.zip.ZipEntry;

    import java.util.zip.ZipInputStream;

    /**

    * 解压缩测试

    * @说明

    * @author cuisuqiang

    * @version 1.0

    * @since

    */

    public class EctractZip {

    @SuppressWarnings( { "unchecked", "static-access" })

    public static void main(String[] args) {

    EctractZip z = new EctractZip();

    ArrayList a = z.Ectract("C:\\a.zip", "C:\\tmp\\"); // 返回解压缩出来的文件列表

    for(String s : a){

    System.out.println(s);

    }

    }

    /**

    * 解压缩

    * @param sZipPathFile 要解压的文件

    * @param sDestPath 解压到某文件夹

    * @return

    */

    @SuppressWarnings("unchecked")

    public static ArrayList Ectract(String sZipPathFile, String sDestPath) {

    ArrayList allFileName = new ArrayList();

    try {

    // 先指定压缩档的位置和档名,建立FileInputStream对象

    FileInputStream fins = new FileInputStream(sZipPathFile);

    // 将fins传入ZipInputStream中

    ZipInputStream zins = new ZipInputStream(fins);

    ZipEntry ze = null;

    byte[] ch = new byte[256];

    while ((ze = zins.getNextEntry()) != null) {

    File zfile = new File(sDestPath + ze.getName());

    File fpath = new File(zfile.getParentFile().getPath());

    if (ze.isDirectory()) {

    if (!zfile.exists())

    zfile.mkdirs();

    zins.closeEntry();

    } else {

    if (!fpath.exists())

    fpath.mkdirs();

    FileOutputStream fouts = new FileOutputStream(zfile);

    int i;

    allFileName.add(zfile.getAbsolutePath());

    while ((i = zins.read(ch)) != -1)

    fouts.write(ch, 0, i);

    zins.closeEntry();

    fouts.close();

    }

    }

    fins.close();

    zins.close();

    } catch (Exception e) {

    System.err.println("Extract error:" + e.getMessage());

    }

    return allFileName;

    }

    }

    请您到ITEYE网站看原创,谢谢!

    解压其实非常简单,因为JDK 中有一个ZipInputStream对象,只需要使用他为我们服务即可!

    展开全文
  • 一、说明rar格式的压缩包收费,java支持zip格式的压缩和解压二、工具类import java.io.*;import java.util.Enumeration;import java.util.List;import java.util.zip.ZipEntry;import java.util.zip.ZipFile;import ...

    一、说明

    rar格式的压缩包收费,java支持zip格式的压缩和解压

    二、工具类

    import java.io.*;

    import java.util.Enumeration;

    import java.util.List;

    import java.util.zip.ZipEntry;

    import java.util.zip.ZipFile;

    import java.util.zip.ZipOutputStream;

    public class ZipUtils {

    private static final int BUFFER_SIZE = 2 * 1024;

    /**

    * zip解压

    * @param srcFile zip源文件

    * @param destDirPath 解压后的目标文件夹

    * @throws RuntimeException 解压失败会抛出运行时异常

    */

    public static void unZip(File srcFile, String destDirPath) throws RuntimeException {

    long start = System.currentTimeMillis();

    // 判断源文件是否存在

    if (!srcFile.exists()) {

    throw new RuntimeException(srcFile.getPath() + "所指文件不存在");

    }

    // 开始解压

    ZipFile zipFile = null;

    try {

    zipFile = new ZipFile(srcFile);

    Enumeration> entries = zipFile.entries();

    while (entries.hasMoreElements()) {

    ZipEntry entry = (ZipEntry) entries.nextElement();

    System.out.println("解压" + entry.getName());

    // 如果是文件夹,就创建个文件夹

    if (entry.isDirectory()) {

    String dirPath = destDirPath + "/" + entry.getName();

    File dir = new File(dirPath);

    dir.mkdirs();

    } else {

    // 如果是文件,就先创建一个文件,然后用io流把内容copy过去

    File targetFile = new File(destDirPath + "/" + entry.getName());

    // 保证这个文件的父文件夹必须要存在

    if(!targetFile.getParentFile().exists()){

    targetFile.getParentFile().mkdirs();

    }

    targetFile.createNewFile();

    // 将压缩文件内容写入到这个文件中

    InputStream is = zipFile.getInputStream(entry);

    FileOutputStream fos = new FileOutputStream(targetFile);

    int len;

    byte[] buf = new byte[BUFFER_SIZE];

    while ((len = is.read(buf)) != -1) {

    fos.write(buf, 0, len);

    }

    // 关流顺序,先打开的后关闭

    fos.close();

    is.close();

    }

    }

    long end = System.currentTimeMillis();

    System.out.println("解压完成,耗时:" + (end - start) +" ms");

    } catch (Exception e) {

    throw new RuntimeException("unzip error from ZipUtils", e);

    } finally {

    if(zipFile != null){

    try {

    zipFile.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    }

    /**

    * 压缩成ZIP 方法

    * @param srcFiles 需要压缩的文件列表

    * @param out 压缩文件输出流

    * @throws RuntimeException 压缩失败会抛出运行时异常

    */

    public static void toZip(List srcFiles , OutputStream out)throws Exception {

    long start = System.currentTimeMillis();

    ZipOutputStream zos = null ;

    try {

    zos = new ZipOutputStream(out);

    for (File srcFile : srcFiles) {

    byte[] buf = new byte[BUFFER_SIZE];

    zos.putNextEntry(new ZipEntry(srcFile.getName()));

    int len;

    FileInputStream in = new FileInputStream(srcFile);

    while ((len = in.read(buf)) != -1){

    zos.write(buf, 0, len);

    }

    zos.closeEntry();

    in.close();

    }

    long end = System.currentTimeMillis();

    System.out.println("压缩完成,耗时:" + (end - start) +" ms");

    } catch (Exception e) {

    throw new RuntimeException("zip error from ZipUtils",e);

    }finally{

    if(zos != null){

    try {

    zos.close();

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    }

    }

    }

    三、使用工具类压缩和解压文件

    import com.szfore.utils.ZipUtils;

    import java.io.File;

    import java.io.FileOutputStream;

    import java.io.OutputStream;

    import java.util.ArrayList;

    import java.util.List;

    public class TestZip {

    public static void main(String[] args) throws Exception{

    //testToZip();

    testUnzip();

    }

    /**

    * 测试压缩文件

    */

    public static void testToZip() throws Exception {

    File file1 = new File("c:\\1.txt");

    File file2 = new File("c:\\2.txt");

    List files = new ArrayList();

    files.add(file1);

    files.add(file2);

    OutputStream out = new FileOutputStream("c:\\1.zip");

    ZipUtils.toZip(files,out);

    }

    /**

    * 测试解压文件

    * @throws Exception

    */

    public static void testUnzip() throws Exception{

    File srcFile = new File("c:\\2.zip");

    String destDirPath = "c:\\";

    ZipUtils.unZip(srcFile,destDirPath);

    }

    }

    展开全文
  • mac怎么打开 sql developer压缩文件 求大神详细解释下如何 解压并且打开。

    mac怎么打开 sql developer压缩文件

    求大神详细解释下如何 解压并且打开。

    展开全文
  •  在用电脑储存或者下载东西的时候,我们经常会遇到压缩的文件,或者把文件压缩一下,让文件占用空间变小,从而进行打包上传或者发布给别人,那么究竟如何压缩文件一起来看一下吧。压缩文件我们经常用到的工具是...

    8c1bfcbb337e7ad830054415649001c6.gif超过10万人正在关注

    d34b4c31bbd84dd2f1fcd393c34cb9d6.gifdd21cc2ae1266975f95c639a8a02fcac.gif91fda888c48cfb876233a4c3a6f7b048.gifa81f5c7f903a80f3b2d649a3c8883897.gif2131b30487584c285698479433af9a6e.gifbde594de75db2a37f0137b55ae68dba4.gifbdc19e1f19fd406d423773ca115e56fb.gifb552a4e19db3c5a44ce163f83865dc08.giffa4c48484cf73582facfcc9dc967d27b.gifcf295284c593d739ba6a23c29dfeef3c.gif1b47d605d282f40a8b7b548800d9b4f4.gifd7d5b85afd8989cd682f96acd543f64d.gif6924f804e1d93ba4e3c859a82fe53772.gif42f8937c021cd27c827f11a7eea69458.gifbde594de75db2a37f0137b55ae68dba4.gif7af67df1be9da7883fc473e6d28faedf.gif

    赶快来关注吧,这里有你想找的热点资讯,这里有你想要的各种资料,还有海量的资源,还在等什么。快来关注,大佬带你开车。

      在用电脑储存或者下载东西的时候,我们经常会遇到压缩的文件,或者把文件压缩一下,让文件占用空间变小,从而进行打包上传或者发布给别人,那么究竟如何压缩文件一起来看一下吧。

    压缩文件我们经常用到的工具是WinRAR,如果大家电脑没有安装此软件,下载安装一个就OK了,如果软件安装好了,我们就可以通过软件对文件进行压缩,非常的方便。  75fef7c9aca8ef2b1bb506ae7473a94c.png

      压缩文件的格式有很多,常用到的后缀文件是rar和zip格式的文件,压缩文件可以很好的减少文件空间大小,在上传文件,或者发送给网友的时候,文件进行压缩一下,是很不错的选择。文件解压,我们用WinRAR软件打开,选择解压到某个文件就可以了,也是很方便的。

      81a0561174687547c6ab4e2dbb4afa59.png

      下面我们一起来看一下还有哪些常用的压缩文件的工具,酷压、WinZIP、7-Zip、360压缩、2345好压、Bandizip等等。

    这几款压缩软件都能解压绝大多数的压缩格式,但它们能够压缩格式有很大的差异。如下图:常用的几种压缩格式:ZIP压缩格式更通用,在Windows、MacOS、Linux都原生支持。ZIPx压缩格式是高级的ZIP格式,提高了压缩率和安全性。RAR压缩格式通常情况比ZIP压缩比高,但压缩、解压速度较慢。RAR加入了冗余数据用于修复压缩包本身损坏,并可以分卷压缩为多个文件。7Z压缩格式开放源代码,支持高压缩比例(使用不同的压缩演算会有不同的结果)。压缩率:ZIP

    f969a2e135bdcb421c29d83fcac4d3c0.png

    从支持压缩的文件格式来说,Bandizip获得首胜,它支持更多的压缩格式,并且能够解压绝大多数的压缩文件格式。这几款压缩软件的噪点

    ①.2345好压(不推荐)2345好压在安装过程中会流氓式的安装广告程序(弹窗广告),安装过程如果开启了杀毒软件会报毒。2345好压在安装结束后,会自动的勾选大礼包,如果没有点选掉大礼包前面的勾,点击“确定”就会安装大礼包。


    ②.酷压(不推荐)酷压不能解压我们常用的RAR格式压缩文件,并且解压文件时会经常提示不支持的压缩算法或直接提示解压错误。酷压早几年就已经停止更新了,无法打开其官方网站。压缩、解压依赖的是算法,算法每年都会发生很大的改变。酷压软件没有人更新就会导致算法老旧,一些通过新的压缩算法压缩的文件就不能被正常解压。

    1abdf9819691c9983f3cc770cd37b693.png

    ③.WinRAR、360压缩(推荐指数★★★)通过WinRAR对文件进行压缩是这几款软件中最慢的,其次是360压缩。往往是其他压缩软件耗时的几倍。WinRAR不支持7Z、ZIPx压缩格式,360压缩不支持RAR、ZIPx压缩格式。WinRAR虽然对于个人用户是免费的,但打开时会有弹窗广告,这是很多人都很厌烦的。

    ④.WinZIP、7-Zip(推荐指数★★★)WinZIP、7-Zip是众多压缩软件中最独立独行的两款。WinZIP不支持RAR、7Z压缩格式,7-Zip不支持RAR、ZIPx压缩格式。WinZip有一个很大的缺点,就是软件界面的易用性很差,文件目录的预览性能差。

    52210e6b6529fc7c1aa0cbdf7c2ba87e.png

    ⑤.Bandizip(推荐指数★★★★)Bandizip支持的压缩格式是最多的。Bandizip支持压缩包内的图片预览。Bandizip的噪点在于软件内包含广告,但广告并不是以弹窗形式出现的,也不会遮挡任何按钮。文件压缩始于互联网早期互联网早期,拨号上网的网速只有几十K每秒,那时没有U盘、光盘、移动硬盘,一台386的电脑硬盘只有200MB左右,一张3.5英寸的软盘容量也只有1.44M(读写速度很慢,复制1M多的文件需要一分多钟)。那时的网络带宽和存储空间可谓是寸土寸金,对文件进行压缩是特别有必要的。后来,文件压缩同时满足了人们对文件进行加密的需求。

    慢慢的,由于人们对于压缩、解压的依赖性强,压缩包成为了病毒传播的主要途径。通过压缩包很多病毒软件可以轻易的进行伪装并逃过杀毒软件的查杀。这直接导致了现在的压缩文件会经过浏览器内置防御模块和杀毒软件的层层检测。随着互联网带宽的提升,U盘、移动硬盘的出现,每GB的存储空间成本已经降低到了白菜价。用户已经很少在本地电脑使用压缩、解压。但压缩过的文件夹在网络进行传输还是可以节省很多传输时间(用过FTP传输文件就会明白,多个文件传输消耗的时间远大于单个文件传输消耗的时间。)推荐BandizipBandizip支持最全的压缩格式,它的压缩速度也是这几款压缩软件中的佼佼者。这样用户就不会因为有的格式不能解压而安装多个压缩解压软件,也就不用挤占宝贵的右键菜单的空间。

    803ee8491eeec77e1c723b3a99d1b612.gif

    66405437d98f95b5935e6e14709e9159.png

    b6a5731854fbad8f9d08144438749178.gif

    您看此文用时

     c8abbb74596816c655fb2ebf38acc452.gif 786a444a34a84e6c383bc81be68470f6.gif18d04ad2c0207a99d4a6fec2fe9b3775.gif b0b1dbec12a32944cdd818956779ffbe.gif

    秒,转发只需1秒呦~

    ccc8a13a1009abce0a2428cb19afb5a8.gif

    分享给你第一个想到的人          点击在看不迷路,我带大家上高速

    224d1ebe3e5460309c8244acbfb112ce.gif

    展开全文
  • 通过ZipInStream类将压缩文件解压到指定的文件夹中:源程序是:import java.io.*;import java.util.zip.*;public class Decompressing { // 创建文件public static void main(String[] temp) {ZipInputStream zin; /...
  • 情况是,我有一个zip文件,里面有一个Excel文件....因此,用户应该能够解压缩...当用户尝试解压缩文件时,他应该能够这样做.当他试图打开Excel文件(在解压缩文件夹中)时,它必须要求输入密码.问题类似于Protect excel file...
  • PDF文件过大怎么压缩?PDF是我们工作和学习中常用的文件,但是有些PDF文件内容很多体积很大,打开以及传输都会比较麻烦。那么我们在使用这种大体积的PDF文件之前需要先处理一下,就是将PDF文件压缩。该怎么压缩PDF...
  • 我想大家都接触过Javascript和CSS吧,网站大量的特性都会用到Javascript和CSS文件,如果网站做大了,这些文件也会越来越多,这些文件一多了,就要影响到网站打开得速度,怎么解决这个问题呢?我们就要显...
  • .img文件怎么打开(解压缩

    千次阅读 2020-11-15 15:12:48
    3、接着在打开方式的选项里,找到安装目录的winrar软件,选择之后的名称是winrar压缩文件管理器。 4、接着进入到压缩软件的界面,此时可以看到里边的文件,点击软件界面的解压到选项。 5、接着选择解压的文件路径,...
  • 最近在看java解压缩,发现RAR没有公开加密算法,所以java内部没有提供api解压,当时就觉得郁闷的,结果在网上查阅了一些,发现了一个思路,就是可以调用系统的命令解压文件,下面是解压的RAR文件的方法package zip;...
  • 我们在自己的电脑上打开是没问题的,发送文件给别人会十分慢为了解决这个问题,我们在传输这种PDF文件时可以先将它压缩一下。如何压缩PDF大小呢?下面就把小编收藏的PDF压缩方法分享给大家。方法一:使用PDF转换工具...
  • 关于压缩大家有没有想到压缩文件,那什么是压缩文件呢?压缩文件就是一个或者多个文件把原有文件大小进行了一个缩小,但是其中所占用的存储空间比压缩前的要小很多,这也是为什么我们要把pdf文件进行压缩的一个原因...
  • [Java教程]gulp压缩css文件跟js文件0 2016-12-16 15:03:27越到最后啊就越发现,真的很理解那句话就是自己多学一点一点知识,就少一句问别人的东西这是多么痛苦的领悟今天需要压缩css跟js文件然后不懂啊 就问别人啊 ...
  • 那么怎么压缩文件呢?大家可以学习一下这种压缩方法哦,那么下面我就跟大家具体介绍一下这种方法吧。有需要的小伙伴要认真看喽。压缩文件:图片文件压缩工具:压缩软件压缩步骤:1、选择压缩首先呢我们需要下载安装...
  • 原标题:怎么压缩pdf文件文件过大、传阅困难就用这个办法有时候,我们会碰到一些内存占比很大的pdf文件文件过大会造成传阅困难等情况发生。面对这样的情况,想要解决问题的话,我们就要把pdf文件进行压缩处理。...
  • 小米手机怎么压缩文件?随着压缩技术的高速发展,手机上也会自带文件压缩和解压的功能,对于手机的用户来说会十分的方便。而对于还不是很了解小米手机如何进行压缩文件的小伙伴们,接下来将会为大家带来详细的操作...
  • 如果一下子有很多份的pdf文件需要上传或者通过电子邮箱发送,我们会发现pdf格式文件太大,导致文件无法发送或是文件发送后无法打开查看。上传速度也变的非常慢,办事效率大大减小。我们应该怎么办呢?PDF文件压缩这...
  • python自带的zipfile的模块支持对文件压缩和解压操作。zipfilp.ZipFile 表示创建一个zip对象zipfile.ZipFile(file[,mode[,compression[,allowZip64]]])#file表示文件的路径#mode表示文件打开模式:r表示读,默认...
  • 很多小伙伴都遇到过apk文件怎么打开的困惑吧,一些朋友看过网上零散的apk文件怎么打开的处理方法,并没有完完全全明白apk文件怎么打开是如何解决的,今天小编准备了简单的解决办法,只需要按照1:其实apk文件严格来...
  • 刚才想把手头上的一份PDF文件发给同事,直接拖进窗口就显示文件...方法一:用PDF编辑软件PDF编辑软件中可以适量压缩PDF文件打开Adobe软件,在软件中打开压缩的PDF文件,然后就点击左上角的文件选择“另存为其他...
  • a)Zip是一种存档格式,而gzip则不是.因此,除非(例如)你的gz文件是压缩的tar文件,否则入口迭代器没有多大意义.你想要的可能是:File ...b)你只想解压缩文件吗?如果不是,您可以使用GZIPInputStream直接读取文件,...
  • 也就是一个压缩文件。 JAR 文件格式提供了许多优势和功能,其中很多是传统的压缩格式如ZIP或者RAR所没有提供的,那么如何打开jar文件?下面,小编就来跟大家介绍打开jar文件的操作技巧了。可以对JAR文件内容加上数字...
  • 通过 sudo apt-get install p7...之后就能够通过鼠标右键选择 提取到此处 直接解压压缩文件。 deng@deng-Lenovo:~$ sudo apt-get install p7zip-rar [sudo] password for deng: 正在读取软件包列表... 完毕 正在分...
  • 怎么压缩PDF文件,一些PDF文件传到网站上使用的时候,因为文件比较大,上传也会出现上传失败的情况,这个时候就需要将PDF文件进行压缩一下了,PDF文件怎么压缩呢?下面就是1:首先将自己的PDF文件准备好放置到同一个...
  • java压缩 GZIP进行简单压缩,ZIP进行多文件保存package org.rui.io.compress;import java.io.BufferedOutputStream;import java.io.BufferedReader;import java.io.FileInputStream;import java.io.FileOutputStream...
  • PDF怎么压缩文件大小

    2019-03-04 15:23:15
    很多人都是比较头疼的,PDF文件是一种比较难处理的文件,有时候因PDF文件太大的问题,会给我们带来很多的困扰,这个时候,用一个方法把PDF文件压缩处理的话,就变得很方便了,下面小编告诉大家PDF怎么压缩文件大小。...
  • 刚才想把手头上的一份PDF文件发给同事,直接拖进窗口就显示文件...方法一:用PDF编辑软件PDF编辑软件中可以适量压缩PDF文件打开Adobe软件,在软件中打开压缩的PDF文件,然后就点击左上角的文件选择“另存为其他...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 782
精华内容 312
关键字:

怎么打开压缩文件