精华内容
下载资源
问答
  • 一、概述在本篇文章中,给大家介绍一下如何将文件进行zip压缩以及如何对zip包解压。所有这些都是使用Java提供核心库java.util.zip来实现。二、压缩文件首先我们来学习一个简单例子-压缩单个文件。将一个名为...

    一、概述

    在本篇文章中,给大家介绍一下如何将文件进行zip压缩以及如何对zip包解压。所有这些都是使用Java提供的核心库java.util.zip来实现的。

    二、压缩文件

    首先我们来学习一个简单的例子-压缩单个文件。将一个名为test1.txt的文件压缩到一个名为Compressed.zip的zip文件中。

    public class ZipFile {

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

    //输出压缩包

    FileOutputStream fos = new FileOutputStream("src/main/resources/compressed.zip");

    ZipOutputStream zipOut = new ZipOutputStream(fos);

    //被压缩文件

    File fileToZip = new File("src/main/resources/test1.txt");

    FileInputStream fis = new FileInputStream(fileToZip);

    //向压缩包中添加文件

    ZipEntry zipEntry = new ZipEntry(fileToZip.getName());

    zipOut.putNextEntry(zipEntry);

    byte[] bytes = new byte[1024];

    int length;

    while((length = fis.read(bytes)) >= 0) {

    zipOut.write(bytes, 0, length);

    }

    zipOut.close();

    fis.close();

    fos.close();

    }

    }

    三、压缩多个文件

    接下来,我们看看如何将多个文件压缩为一个zip文件。我们将把test1.txt和test2.txt压缩成multiCompressed.zip:

    public class ZipMultipleFiles {

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

    List srcFiles = Arrays.asList("src/main/resources/test1.txt", "src/main/resources/test2.txt");

    FileOutputStream fos = new FileOutputStream("src/main/resources/multiCompressed.zip");

    ZipOutputStream zipOut = new ZipOutputStream(fos);

    //向压缩包中添加多个文件

    for (String srcFile : srcFiles) {

    File fileToZip = new File(srcFile);

    FileInputStream fis = new FileInputStream(fileToZip);

    ZipEntry zipEntry = new ZipEntry(fileToZip.getName());

    zipOut.putNextEntry(zipEntry);

    byte[] bytes = new byte[1024];

    int length;

    while((length = fis.read(bytes)) >= 0) {

    zipOut.write(bytes, 0, length);

    }

    fis.close();

    }

    zipOut.close();

    fos.close();

    }

    }

    四、压缩目录

    下面的例子,我们将zipTest目录及该目录下的递归子目录文件,全都压缩到dirCompressed.zip中:

    public class ZipDirectory {

    public static void main(String[] args) throws IOException, FileNotFoundException {

    //被压缩的文件夹

    String sourceFile = "src/main/resources/zipTest";

    //压缩结果输出,即压缩包

    FileOutputStream fos = new FileOutputStream("src/main/resources/dirCompressed.zip");

    ZipOutputStream zipOut = new ZipOutputStream(fos);

    File fileToZip = new File(sourceFile);

    //递归压缩文件夹

    zipFile(fileToZip, fileToZip.getName(), zipOut);

    //关闭输出流

    zipOut.close();

    fos.close();

    }

    /**

    * 将fileToZip文件夹及其子目录文件递归压缩到zip文件中

    * @param fileToZip 递归当前处理对象,可能是文件夹,也可能是文件

    * @param fileName fileToZip文件或文件夹名称

    * @param zipOut 压缩文件输出流

    * @throws IOException

    */

    private static void zipFile(File fileToZip, String fileName, ZipOutputStream zipOut) throws IOException {

    //不压缩隐藏文件夹

    if (fileToZip.isHidden()) {

    return;

    }

    //判断压缩对象如果是一个文件夹

    if (fileToZip.isDirectory()) {

    if (fileName.endsWith("/")) {

    //如果文件夹是以“/”结尾,将文件夹作为压缩箱放入zipOut压缩输出流

    zipOut.putNextEntry(new ZipEntry(fileName));

    zipOut.closeEntry();

    } else {

    //如果文件夹不是以“/”结尾,将文件夹结尾加上“/”之后作为压缩箱放入zipOut压缩输出流

    zipOut.putNextEntry(new ZipEntry(fileName + "/"));

    zipOut.closeEntry();

    }

    //遍历文件夹子目录,进行递归的zipFile

    File[] children = fileToZip.listFiles();

    for (File childFile : children) {

    zipFile(childFile, fileName + "/" + childFile.getName(), zipOut);

    }

    //如果当前递归对象是文件夹,加入ZipEntry之后就返回

    return;

    }

    //如果当前的fileToZip不是一个文件夹,是一个文件,将其以字节码形式压缩到压缩包里面

    FileInputStream fis = new FileInputStream(fileToZip);

    ZipEntry zipEntry = new ZipEntry(fileName);

    zipOut.putNextEntry(zipEntry);

    byte[] bytes = new byte[1024];

    int length;

    while ((length = fis.read(bytes)) >= 0) {

    zipOut.write(bytes, 0, length);

    }

    fis.close();

    }

    }

    要压缩子目录及其子目录文件,所以需要递归遍历

    每次遍历找到的是目录时,我们都将其名称附加“/”,并将其以ZipEntry保存到压缩包中,从而保持压缩的目录结构。

    每次遍历找到的是文件时,将其以字节码形式压缩到压缩包里面

    五、解压缩zip压缩包

    下面为大家举例讲解解压缩zip压缩包。在此示例中,我们将compressed.zip解压缩到名为

    public class UnzipFile {

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

    //被解压的压缩文件

    String fileZip = "src/main/resources/unzipTest/compressed.zip";

    //解压的目标目录

    File destDir = new File("src/main/resources/unzipTest");

    byte[] buffer = new byte[1024];

    ZipInputStream zis = new ZipInputStream(new FileInputStream(fileZip));

    //获取压缩包中的entry,并将其解压

    ZipEntry zipEntry = zis.getNextEntry();

    while (zipEntry != null) {

    File newFile = newFile(destDir, zipEntry);

    FileOutputStream fos = new FileOutputStream(newFile);

    int len;

    while ((len = zis.read(buffer)) > 0) {

    fos.write(buffer, 0, len);

    }

    fos.close();

    //解压完成一个entry,再解压下一个

    zipEntry = zis.getNextEntry();

    }

    zis.closeEntry();

    zis.close();

    }

    //在解压目标文件夹,新建一个文件

    public static File newFile(File destinationDir, ZipEntry zipEntry) throws IOException {

    File destFile = new File(destinationDir, zipEntry.getName());

    String destDirPath = destinationDir.getCanonicalPath();

    String destFilePath = destFile.getCanonicalPath();

    if (!destFilePath.startsWith(destDirPath + File.separator)) {

    throw new IOException("该解压项在目标文件夹之外: " + zipEntry.getName());

    }

    return destFile;

    }

    }

    喜欢 (2)or分享 (0)

    展开全文
  • zip文件格式是通用文档压缩标准。自1.6版本起,Python中zipfile模块能够直接处理zip文件里数据,例如需要将对应目录或多个文件打包或压缩成zip格式,或者需要查看一个zip格式归档文件中部分或者所有文件同时...

    zip文件格式是通用的文档压缩标准。自1.6版本起,Python中zipfile模块能够直接处理zip文件里的数据,例如需要将对应目录或多个文

    件打包或压缩成zip格式,或者需要查看一个zip格式的归档文件中部分或者所有文件同时避免讲这些文件展开到磁盘上。使用ZipFile类来

    操作zip文件。

    创建一个ZipFile对象,表示一个zip文件。

    参数file:文件的路径或者类似文件对象

    参数mode:读“r”,写入“w”,添加“a”

    参数compression:ZIP_STORED(无压缩),ZIP_DEFLATED(压缩,需要zlib支持)

    参数allowZip64:默认情况下报错,将其设为Trus,ZipFIle将用ZIP64扩展进行创建文件。

    解压ZIP文档中的所有文件到指定目录。

    推荐学习《python教程》

    下面示例演示了读取一个ZIP文档,将文档里所有文件解压到名为“work”的文件里。#-*-coding: UTF-8 -*-

    import zipfile

    if __name__ == '__main__':

    zFile = zipfile.ZipFile("F:xt.zip", "r")

    #ZipFile.namelist(): 获取ZIP文档内所有文件的名称列表

    for fileM in zFile.namelist():

    zFile.extract(fileM, "F:work")

    zFile.close();

    展开全文
  • 但是要不就是压缩之后文件会有空文件夹在压缩包中,要不就是压缩之后文件在Linux服务器上解压出现问题,产生这个问题主要原因是文件目录分隔符没有设置正确,如果我们想让压缩之后文件能在Linux服务器上...

    java代码实现tar包压缩文件的代码在网上能找到很多,但是要不就是压缩之后的文件会有空文件夹在压缩包中,要不就是压缩之后的文件在Linux服务器上解压出现问题,产生这个问题的主要原因是文件的目录分隔符没有设置正确,如果我们想让压缩之后的文件能在Linux服务器上正常解压,该怎么做呢?

    首先我们要用File.separator代替“/”;(Windows和Linux目录分隔符的表示方法一个是“/”,一个是“\”)

    比如:d://test.tar替换为"d:"+ File.separator +"test.tar"    d:/test.tar  替换为"d:"+ File.separator +"test.tar"

    如果不加,跨平台解压,到Linux服务器解压可能会解压出来的是一个路径;

    其次要在代码中加入filePath = filePath.replace(File.separator, "/");把所有的“\\”替换成“/”

    此处不加,可能会导致压缩文件有空的文件夹产生

    最后要把outputStream设置成如下格式:

    outputStream.setLongFileMode(TarOutputStream.LONGFILE_GNU);(此处有三种设置方法且此处用的是ant-1.7.1.jar包的方法)

    如果使用commons-compress-1.9.jar进行压缩,则此处使用的是:

    outputStream.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU);

    此处不加的话就会报错,类似:

    “java.lang.RuntimeException: file name 'sss/workspace/java/projects/AIM_AGENT' is too long ( > 100 bytes)

    at org.apache.commons.compress.archivers.tar.TarArchiveOutputStream.handleLongName(TarArchiveOutputStream.java:674)

    at org.apache.commons.compress.archivers.tar.TarArchiveOutputStream.putArchiveEntry(TarArchiveOutputStream.java:275)

    at tar.TarBuildfile.archiveFile(TarBuildfile.java:171)”

    commons-compress-1.9.jar压缩解压包的官网说明如下:http://commons.apache.org/proper/commons-compress/tar.html

    6c1555302777729326ca3efa0910d9ec.png

    以下代码在ant-1.7.1.jar下编译通过,能正常压缩并使用tar解压命令在Linux服务器上正常解压。

    package tar;

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.FileNotFoundException;

    import java.io.FileOutputStream;

    import java.io.IOException;

    import java.io.InputStream;

    import java.util.HashMap;

    import java.util.Map;

    import org.apache.tools.tar.TarEntry;

    import org.apache.tools.tar.TarOutputStream;

    public class TarFileBuilder {

    private String tarFileName;

    private String parentFilePath;

    private TarOutputStream outputStream = null;

    private boolean isClosed = false;

    public TarFileBuilder(String tarFileName) {

    this.tarFileName = tarFileName;

    }

    public Map addFile(String fileName) throws IOException {

    buildParentPath();

    File file = new File(fileName);

    parentFilePath = file.getParentFile().getAbsolutePath();

    buildOutputStream();

    return addFileByFullPath(fileName);

    }

    private Map addFileByFullPath(String fileName)

    throws IOException {

    Map errorInfo = new HashMap();

    File file = new File(fileName);

    if (file.isDirectory()) {

    addDir(file, getEntryFileName(parentFilePath, fileName));

    } else {

    try {

    addFile(file, getEntryFileName(parentFilePath, fileName));

    } catch (IOException e) {

    e.printStackTrace();

    errorInfo.put(fileName, e);

    }

    }

    return errorInfo;

    }

    public void addDir(File file,String entryFileName) throws IOException {

    if(!entryFileName.endsWith("/") && !entryFileName.endsWith("\\")) {

    entryFileName = entryFileName + "/";

    }

    TarEntry tarEntry = new TarEntry(entryFileName);

    outputStream.putNextEntry(tarEntry);

    outputStream.closeEntry();

    for (String item : file.list()) {

    //addFileByFullPath(file.getAbsolutePath() + File.separator + item);

    addFileByFullPath(file.getAbsolutePath() + "/" + item);

    }

    }

    public void addFile(File file, String entryFileName) throws IOException {

    buildOutputStream();

    InputStream inputStream = null;

    try {

    inputStream = new FileInputStream(file);

    TarEntry tarEntry = new TarEntry(entryFileName);

    int length = 0;

    byte[] buffer = new byte[4096];

    tarEntry.setSize(file.length());

    outputStream.putNextEntry(tarEntry);

    while ((length = inputStream.read(buffer)) != -1) {

    outputStream.write(buffer, 0, length);

    outputStream.flush();

    }

    outputStream.closeEntry();

    } finally {

    outputStream.closeEntry();

    if (inputStream != null) {

    inputStream.close();

    }

    }

    }

    private void buildParentPath() {

    File file = new File(tarFileName).getParentFile();

    //System.out.println(file);

    if (!file.exists()) {

    file.mkdirs();

    }

    }

    private String getEntryFileName(String parentFilePath, String filePath) {

    filePath = filePath.substring(parentFilePath.length());

    while (filePath.startsWith(File.separator)) {

    filePath = filePath.substring(1);

    //把所有的“//”转换为“/”

    filePath = filePath.replace(File.separator, "/");

    }

    return filePath;

    }

    private void buildOutputStream() throws FileNotFoundException {

    if (outputStream == null || isClosed) {

    outputStream = new TarOutputStream(

    new FileOutputStream(tarFileName));

    outputStream.setLongFileMode(TarOutputStream.LONGFILE_TRUNCATE);

    isClosed = false;

    }

    }

    public void close() throws IOException {

    if (outputStream != null) {

    outputStream.close();

    }

    isClosed = true;

    }

    public static void main(String[] args) {

    TarFileBuilder tarFileBuilder = new TarFileBuilder("d:"+ File.separator +"test.tar");

    try {

    Map map = tarFileBuilder.addFile("E:"+ File.separator +"sss");

    //System.out.println(map);

    } catch (IOException e) {

    e.printStackTrace();

    } finally {

    try {

    tarFileBuilder.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    }

    此代码想要进行多文件压缩到同一个文件夹中,直接调用tarFileBuilder.addFile(“路径”);即可

    展开全文
  • 如题。。。。。。。。。。。。
  • # 怎么用c#写一个解压指定目录下所有的压缩文件,并且把压缩文件里面内容放进指定文件夹呢?
  • 如何实现像右键解压到当前文件夹的功能:即压缩文件里面所有东西都解压出来。
  • ubuntu分卷压缩文件怎么解压

    千次阅读 2017-11-08 16:37:28
    1.分卷压缩ubuntu下没有默认安装... 安装过后,使用以下命令进行分卷压缩:rar a -vSIZE 压缩后的文件名 被压缩的文件或者文件夹例如:rar a -v50000k eclipse.rar eclipse此命令即为对eclipse文件夹进行分卷压缩,每
    1.分卷压缩
    ubuntu下没有默认安装rar,可以通过 sudo apt-get install rar,sudo apt-get install unrar 来安装rar. 安装过后,使用以下命令进行分卷压缩:
    rar a -vSIZE 压缩后的文件名 被压缩的文件或者文件夹

    例如:
    rar a -v50000k eclipse.rar eclipse

    此命令即为对eclipse文件夹进行分卷压缩,每卷的大小为50000k,压缩后的文件名为eclipse.rar
    2.解压
    对任何一个分卷执行:
    rar e eclipse.part1.rar

    二,使用tar
    1.分卷压缩
    tar cvzpf - eclipse | split -d -b 50m

    上面的命令是将eclipse这个文件夹分卷压缩,每卷50m,注意eclipse 前面有空格.压缩完之后,会被命名为x00,x01,x02。。。
    2.解压
    首先需要合并: 合并的命令是:
    cat x*>eclipse.tar.gz

    然后解压:
    tar xzvf eclipse.tar.gz
    展开全文
  • 前面,笔者讲到。如何把文件打包为zip包,那么反过来怎么把zip文件包解压为...而解压缩只需要解压一级,压缩包里面的压缩文件则不必理会。直接上代码喽:/*** 解压文件* @param zipPath 要解压的目标文件* @param...
  • 01.前言 我在上篇文章“关于压缩和解压缩的一些名词简介”中简单介绍过“分卷压缩”,“分卷”就是化整为零,主要用于将非常大的文件压缩成多个“子压缩包”,解压的时候,必须集齐全部“子压缩包”在一个文件夹,...
  • 前面,笔者讲到。如何把文件打包为zip包,那么反过来怎么把zip文件包解压为...而解压缩只需要解压一级,压缩包里面的压缩文件则不必理会。直接上代码喽:/*** 解压文件* @param zipPath 要解压的目标文件* @param...
  • 首先你要确保自己有完整压缩包,可能对方将压缩包分为5个,那么你就需要拿到5份压缩包,然后将压缩包放在同一文件夹内,随便点其中一个就能解压了。 二、WinRAR怎么分卷压缩: 2 2.1 如果你的压缩工具是上面这种...
  • 通过ZipInStream类将压缩文件解压到指定的文件夹中:源程序是:import java.io.*;import java.util.zip.*;public class Decompressing { // 创建文件public static void main(String[] temp) {ZipInputStream zin; /...
  • 代码奉上:解压文件夹:'''解压配置的文件夹:return:'''dirpath = “解压的目标路径”filepath = "需要解压压缩文件"if not os.path.exists(dirpath):os.mkdir(dirpath)zfobj = zipfile.ZipFile(filepath)for...
  • Python语言对文件方面处理还是很方便,例如以前有为大家介绍过Python读取分割压缩TXT文本文件方法、Python批量删除windows下svn文件夹的方法等,都是很实用文件相关操作方法。python脚本如何解压指定路径下...
  • SharpZipLib压缩文件和文件夹

    千次阅读 2012-05-28 09:59:56
    正常zip方式压缩文件,然后用wrar工具可以解压出来(开始用wrar3.4版本的怎么也解不出来,以为是不支持wrar解压,后来改用3.9及4.11版本可以实现正常解压,搞了半天时间,原来是版本问题,版本不对害死人啊),另外...
  • 前面,笔者讲到。如何把文件打包为zip包,那么反过来怎么把zip文件包解压为正常文件呢?...而解压缩只需要解压一级,压缩包里面的压缩文件则不必理会。直接上代码喽: /** * 解压文件 * @param zipPath...
  • 矩池云怎么上传文件夹

    千次阅读 2020-06-30 10:07:04
    将需要上传的文件压缩成zip、rar等Linux支持解压缩的文件类型,并上传到云盘。因为矩池云的网盘没上传完空间就计算进去了,大家上传的时候一定要看到已上传,再去解压。 2. 开启一台主机(当然只是为了解压缩可以...
  • 所有文件都会跑出来,这样利于我们使用图片文件下面经验中的方法好在可以对文件单独的多项文件进行压缩,需要使用文件时只要解压需要使用的文件就可以了,不会影响到其它一同压缩的文件。 方法/...
  • 方法/步骤1下载好后解压发现没有data文件夹,这可怎么办,网上查看了很多发方法,总是看不懂,新版原来是改了,需要初始化,下面一步一步道来。2新建一个data文件夹。3打开配置文件my-default.ini看到里面...
  • 第二种方法,例如BatterZip此类Mac压缩解压工具打包加密。第三种方法,Mac加密软件,例如Espionage for mac,可以直接对文件夹和文件进行加密。整个来说,用系统自带磁盘工具最麻烦,Mac加密软件最方便。 第一种...
  • 因项目中使用大量图片上传功能,请求次数过多,导致... 解压缩时长24秒测试环境:ubuntu 13, jdk 1.8缺点:1 压缩文件不能为文件夹2 压缩比例不明显,文件大小没怎么缩小/*** 压缩** @param files* 压缩的文件* @param ...
  • 将形成的文件夹,重新压缩,再将后缀名改成jar(然并卵) 2.重新压缩后,导入myeclipse,再以jar File的形式导出来。运行时报错,意思是没有main方法。(安装包哪有main方法呀) 3.jar -cvf 压缩名.jar 文件夹(也...
  • 网上找了几个使用ftp上传例子但是没有实现,各方面总结加上自己理解编写,最后使用sftp进行涉及,最后实现了文件上传、下载、删除、解压缩以及文件夹的创建。特此记录下一下,以便不时之需。1.简单了解 ftp和...
  • 下面这个示例便是使用ASP.NET来实现上传文件夹并对文件夹进行压缩以及解压。 ASP.NET页面设计:TextBox和Button按钮。 TextBox中需要自己受到输入文件夹的路径(包含文件夹),通过Button实现选择文件夹的问题还...
  • zip解压APP为用户提供了完全免费文件解压缩功能服务,超高效的压缩解压,支持将文档、图片、PDF和图片等多种文件夹进行压缩压缩解压的过程稳定高效,不会 影响文件打开也不会有乱码出现。还可以解压各种不同...
  • (文件夹名)--查看路径2、dir---查看当前路径下所有文件3、unzip***.zip-----压缩文件到当前目录4、wget(路径)----下载5、mv*******----移动或者重命名6、rm******----删除一次可以删除多个7、pwd----显示当前路径8...
  • tar文件是什么?怎么解压

    千次阅读 2020-06-06 19:40:18
    这种文件一般的压缩软件貌似是打不开,这里使用命令行对它解压。 #首先切换到你想要把它解压的地方,例如我想解压到d盘: #直接在cmd中输入: d:#回车 tar -xvf filename#直接复制过来就好了 然后你就能在d盘看到...
  • 之前遇到了一个坑,由于网络问题,一直没有记录下来,今天...这就很奇怪了,我明明上传了,而且看打印log也显示解压成功,怎么会显示没有文件呢?我后来打印了那个目录下所有文件列表,发现了一个奇怪问题,文
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼...我思路是这样解压文件就是将这个压缩文件夹文件取出来,放到指定地方,而这个过程就是相当但是于将这个文件夹文件copy到指定地方。上代码[code=php]...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 140
精华内容 56
关键字:

压缩的文件夹怎么解压