Java Zip UnZip

news/2024/11/17 0:20:35/

压缩和解压,一般可以使用如下两种方式:

  1. java Util 中提供的工具类
  2. Apache 中提供的工具类

java里面有个包叫java.util.zip提供zip文件压缩,但是编码的时候非常不方便。编码量太多了,通过搜索,发现apache有个包提供一些简单的方法来实现zip文件的压缩与解压缩http://ant.apache.org/。下载地址:org.apache.tools.zip。下载下来解压缩后,该包中的ant.jar里面提供了zip文件压缩与解压缩的功能代码。在项目中引用该类库。

压缩文件或者文件夹 压缩采用gb2312编码,其它编码方式可能造成文件名与文件夹名使用中文的情况下压缩后为乱码。。。
要压缩的文件或者文件夹 建议使用"c:/abc"或者"c:/abc/aaa.txt"这种形式来给定压缩路径,使用"c:\abc" 或者"c:\abc\aaa.txt"这种形式来给定路径的话,可能导致出现压缩和解压缩路径意外故障。。。

ApacheUnZip

package com.java.base.util.zip;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;public class ApacheUnZip {public static void main(String[] args){unzip("D:\\download\\jQuery-File-Upload-master824320160819.zip", "D:\\download");}public static void unzip(String zipFile,String outputPath){if(outputPath == null)outputPath = "";elseoutputPath+=File.separator;// 1.0 Create output directoryFile outputDirectory = new File(outputPath);if(outputDirectory.exists())outputDirectory.delete();outputDirectory.mkdir();// 2.0 Unzip (create folders & copy files)try {// 2.1 Get zip input streamZipInputStream zip = new ZipInputStream(new FileInputStream(zipFile));ZipEntry entry = null;int len;byte[] buffer = new byte[1024];// 2.2 Go over each entry "file/folder" in zip filewhile((entry = zip.getNextEntry()) != null){if(!entry.isDirectory()){System.out.println("-"+entry.getName());// create a new fileFile file = new File(outputPath +entry.getName());// create file parent directory if does not existif(!new File(file.getParent()).exists())new File(file.getParent()).mkdirs();// get new file output streamFileOutputStream fos = new FileOutputStream(file);// copy byteswhile ((len = zip.read(buffer)) > 0) {fos.write(buffer, 0, len);}fos.close();}}}catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}

ApacheZip

package com.java.base.util.zip;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;/*** java里面有个包叫java.util.zip提供zip文件压缩,但是编码的时候非常不方便。编码量太多了,通过搜索,发现apache有个包提供一些简单的方法来实现zip文件的压缩与解压缩http://ant.apache.org/。下载地址:org.apache.tools.zip* 下载下来解压缩后,该包中的ant.jar里面提供了zip文件压缩与解压缩的功能代码。在项目中引用该类库。** 压缩文件或者文件夹 压缩采用gb2312编码,其它编码方式可能造成文件名与文件夹名使用中文的情况下压缩后为乱码。。。* 要压缩的文件或者文件夹 建议使用"c:/abc"或者"c:/abc/aaa.txt"这种形式来给定压缩路径,使用"c:\\abc" 或者"c:\\abc\\aaa.txt"这种形式来给定路径的话,可能导致出现压缩和解压缩路径意外故障。。。** @author cnhuangsl**/
public class ApacheZip {/*** 测试* @param args*/public static void main(String[] args) {try {ZIP("D:/test/src", "D:/test/src.zip");} catch (IOException e) {e.printStackTrace();}}/*** 压缩文件(包括文件夹)** @param source 要压缩的文件或是文件夹* @param zipFileName 压缩后的文件名* @throws IOException*/private static void ZIP(String source, String zipFileName) throws IOException {ZipOutputStream zos = new ZipOutputStream(new File(zipFileName));zos.setEncoding("gb2312");File file = new File(source);if (file.isDirectory()) {// 如果直接压缩文件夹ZIPDIR(source, zos, file.getName() + "/");// 此处使用/来表示目录,如果使用\\来表示目录的话,会导致压缩后的文件目录组织形式在解压缩的时候不能正确识别。} else {// 如果直接压缩文件ZIPDIR(source, zos, new File(file.getParent()).getName() + "/");ZIPFILE(source, zos, new File(file.getParent()).getName() + "/" + file.getName());}zos.closeEntry();zos.close();}/*** 压缩文件夹** @param sourceDir 要压缩的文件夹* @param zos 压缩输出流* @param target 压缩后文件的目录(父文件夹)* @throws IOException*/private static void ZIPDIR(String sourceDir, ZipOutputStream zos, String target) throws IOException {ZipEntry ze = new ZipEntry(target);zos.putNextEntry(ze);// 提取要压缩的文件夹中的所有文件File f = new File(sourceDir);File[] fileList = f.listFiles();if (fileList != null) {// 如果该文件夹下有文件则提取所有的文件进行压缩for (File subFile : fileList) {if (subFile.isDirectory()) {// 如果是目录则进行目录压缩ZIPDIR(subFile.getPath(), zos, target + subFile.getName() + "/");} else {// 如果是文件,则进行文件压缩ZIPFILE(subFile.getPath(), zos, target + subFile.getName());}}}}/*** 压缩文件** @param sourceFileName 要压缩的文件* @param zos 压缩输出流* @param target 压缩后文件的目录(父文件夹)* @throws IOException*/public static void ZIPFILE(String sourceFileName, ZipOutputStream zos, String target) throws IOException {System.out.println(target);ZipEntry ze = new ZipEntry(target);zos.putNextEntry(ze);FileInputStream fis = new FileInputStream(sourceFileName);byte[] buffer = new byte[1024];int location = 0;while((location = fis.read(buffer)) != -1) {zos.write(buffer, 0, location);}fis.close();}
}

UtilUnZip

package com.java.base.util.zip;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;//使用JAVA的压缩流实现对压缩文件的解压实例
public class UtilUnZip {public static void main(String[] args) {// 要解缩的文件File zipFile = new File("c:" + File.separator + "haha.zip");// 解压后的目录File dir = new File("c:" + File.separator + "unzip_haha");// 输出流OutputStream out = null;// 压缩输入流ZipInputStream zin = null;try {if (!dir.exists()) // 如果解压目录不存在,则创建目录{dir.mkdirs();}zin = new ZipInputStream(new FileInputStream(zipFile));ZipEntry entry = null;// 压缩实体对象while ((entry = zin.getNextEntry()) != null) {out = new FileOutputStream(new File(dir, entry.getName()));int temp = 0;while ((temp = zin.read()) != -1) {out.write(temp);}out.close();}} catch (Exception ex) {ex.printStackTrace();} finally {try {zin.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}

UtilZip

package com.java.base.util.zip;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;//使用JAVA的压缩流实现对文件夹的压缩实例
public class UtilZip {public static void main(String[] args) {// TODO Auto-generated method stub// 要压缩的目录File dir = new File("c:" + File.separator + "haha");// 压缩后的文件File zipFile = new File("c:" + File.separator + "haha.zip");// 输出压缩流ZipOutputStream zout = null;// 输入流,用来读取每一个要压缩的文件InputStream in = null;try {// 实例化压缩输出流对象zout = new ZipOutputStream(new FileOutputStream(zipFile));// 遍历要压缩的目录File[] files = dir.listFiles();// 写入压缩文件的备注zout.setComment("my zip file demo");for (int i = 0; i < files.length; i++) {in = new FileInputStream(files[i]);// 生成一个压缩实体,压入到压缩文件中。zout.putNextEntry(new ZipEntry(files[i].getName()));int temp = 0;while ((temp = in.read()) != -1) {zout.write(temp);}in.close();}} catch (Exception ex) {ex.printStackTrace();} finally {try {zout.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}

http://www.ppmy.cn/news/190443.html

相关文章

unzip报错 extra bytes at beginning or within zipfile (attempting to process anyway)

Shell脚本unzip报错 命令行自己解压没问题&#xff0c;但是脚本就报错。 ##报错如下 Archive: /mnt/home4T/day/BD-2017-04-01.zip warning [/mnt/home4T/day/BD-2017-04-01.zip]: 12331803155 extra bytes at beginning or within zipfile(attempting to process anyway) er…

无法完成压缩(zipped)文件来提取向导,怎么解决

1.找到这个高姿态的 压缩文件 右击 属性 点击 安全 点击 编辑 2.选择自己用户名 3.点击 点击应用 再确定 完美解决 ( •̀ ω •́ )y

Python zip, unzip, zip_longest的用法

目录 0. 前言 1. zip()有什么好处&#xff1f; 2. zip基本使用方法 2.1 语法 2.2 使用例 3. 反向操作&#xff1a;unzip 4. zip_longest() 0. 前言 本文简单介绍python中的zip()方法的使用&#xff0c;并相应介绍与之相关联的itertools模块中的zip_longest()。 简而言之&…

zip和unzip用法

zip 1.功能作用&#xff1a;压缩文件或者目录 2.位置&#xff1a;/usr/bin/zip 3.格式用法&#xff1a;zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list] 4.主要参数 -f 更新现有的文件 -u 与-f参数类似&#xff0c;但是除了更新现有的文件外&…

多传感器融合SLAM --- 9.LIO-SAM如何运行、运行节点介绍

目录 1 LIO-SAM如何运行起来的 1.1 run.launch --- LIO-SAM主节点 1.2 module_loam.launch ---- 代码!启动!

zip用法

在学习《python编程 从入门到实践》这本书时&#xff0c;在16章‘收盘价均值’这里的代码遇到了问题&#xff0c;写下此笔记总结一下zip的用法 &#xff08;菜鸟自己靠代码测试做的总结&#xff0c;如有错误&#xff0c;烦请指正&#xff09;。 【注】python中&#xff0c;以中…

测试进阶必备,这5款http接口自动化测试工具真的很香

现在市场上能做接口自动化测试的工具有很多&#xff0c;一搜一大把&#xff0c;让人眼花缭乱。我们去选择对应实现方式时&#xff0c;不管是框架体系还是成熟稳定的工具&#xff0c;核心目的都是期望引入的技术能在最低投入的情况下达到最优效果。 那么我们选择依据出来了&…

拒绝“肌肉记忆”,卡萨帝迈进场景品牌新赛道

文|螳螂财经 作者|余一 面对不断迭代的市场需求&#xff0c;身处其中能做到始终屹立不倒的实属少见&#xff0c;也因如此主动谋变&#xff0c;成为企业成功的必须要素。卡萨帝正是其中之一&#xff0c;身处高端第一、行业第二的她&#xff0c;面对“百尺竿头”的需求&#xf…