java.util.zip包在解压缩文件方面入门使用

工作空闲之余,无意间点了一下java.util.zip包下面的一些源码看了一看。知道其使用的范围就是针对我们日常中关于

文件的压缩和解压的操作。写了一些常用的压缩文件(单个文件和多个文件的压缩)、解压文件(解压单个文件和文件夹)的

小小Demo。

package com.clark.zip;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.zip.ZipEntry;

import java.util.zip.ZipException;

import java.util.zip.ZipFile;

import java.util.zip.ZipInputStream;

import java.util.zip.ZipOutputStream;

/**

* 单个文件压缩

* @author caolipeng

* @date 2014年12月22日 下午2:48:15

* @SingleFileZip.java

* @version 1.0

*/

public class FileZip {

public static void main(String[] args) {

/*getZipFileName();*/

/**压缩单个文件*/

/*String filepath = "F:/iBoxClearDB_Orcl.sql";

String zippath = "F:/test/db.zip";

ZipFile(filepath, zippath);*/

/**一次性压缩多个文件,文件存放至一个文件夹中*/

/*String filepath = "E:/工作周报/";

String zippath = "F:/test/week-job.zip";

ZipMultiFile(filepath, zippath);*/

/**  解压缩(解压缩单个文件)*/

/*String zippath = "F:/test/db.zip";

String outfilepath = "F:/test.sql";

String filename = "iBoxClearDB_Orcl.sql";

zipContraFile(zippath, outfilepath, filename);*/

/**解压缩(压缩文件中包含多个文件)*/

String zippath = "F:/test/week-job.zip";

String outfilepath = "F:/";

ZipContraMultiFile(zippath, outfilepath);

}

/**得到zip文件的文件名*/

private static void getZipFileName() {

File file = new File("F:/test/temp.zip");

ZipFile zipFile = null;

try {

zipFile = new ZipFile(file);

System.out.println("zip file name is :"+zipFile.getName());

} catch (ZipException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}finally{

if(zipFile!=null){

try {

zipFile.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

/** 压缩单个文件*/

public static void zipFile(String filepath ,String zippath) {

InputStream input = null;

ZipOutputStream zipOut = null;

try {

File file = new File(filepath);

File zipFile = new File(zippath);

input = new FileInputStream(file);

zipOut = new ZipOutputStream(new FileOutputStream(zipFile));

zipOut.putNextEntry(new ZipEntry(file.getName()));

int temp = 0;

while((temp = input.read()) != -1){

zipOut.write(temp);

}

System.out.println("zip "+filepath+" to "+zippath);

} catch (Exception e) {

e.printStackTrace();

}finally{

try {

input.close();

zipOut.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

/** 一次性压缩多个文件,文件存放至一个文件夹中*/

public static void zipMultiFile(String filepath ,String zippath) {

try {

File file = new File(filepath);// 要被压缩的文件夹

File zipFile = new File(zippath);

InputStream input = null;

ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile));

if(file.isDirectory()){

File[] files = file.listFiles();

for(int i = 0; i < files.length; ++i){

input = new FileInputStream(files[i]);

zipOut.putNextEntry(new ZipEntry(file.getName() + File.separator + files[i].getName()));

int temp = 0;

while((temp = input.read()) != -1){

zipOut.write(temp);

}

input.close();

}

}else{//否则,则调用压缩单个文件的方法

zipFile(filepath, zippath);

}

zipOut.close();

System.out.println("zip directory is success");

} catch (Exception e) {

e.printStackTrace();

}

}

/**  解压缩(解压缩单个文件)*/

public static void zipContraFile(String zippath ,String outfilepath ,String filename) {

try {

File file = new File(zippath);//压缩文件路径和文件名

File outFile = new File(outfilepath);//解压后路径和文件名

ZipFile zipFile = new ZipFile(file);

ZipEntry entry = zipFile.getEntry(filename);//所解压的文件名

InputStream input = zipFile.getInputStream(entry);

OutputStream output = new FileOutputStream(outFile);

int temp = 0;

while((temp = input.read()) != -1){

output.write(temp);

}

input.close();

output.close();

} catch (Exception e) {

e.printStackTrace();

}

}

/**解压缩(压缩文件中包含多个文件)可代替上面的方法使用。

* ZipInputStream类

* 当我们需要解压缩多个文件的时候,ZipEntry就无法使用了,

* 如果想操作更加复杂的压缩文件,我们就必须使用ZipInputStream类

* */

public static void ZipContraMultiFile(String zippath ,String outzippath){

ZipInputStream zipInput = null;

ZipFile zipFile = null;

InputStream input = null;

OutputStream output = null;

try {

File file = new File(zippath);

File outFile = null;

zipFile = new ZipFile(file);

zipInput = new ZipInputStream(new FileInputStream(file));

ZipEntry entry = null;

while((entry = zipInput.getNextEntry()) != null){

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

outFile = new File(outzippath + File.separator + entry.getName());

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

outFile.getParentFile().mkdir();

}

if(!outFile.exists()){

outFile.createNewFile();

}

input = zipFile.getInputStream(entry);

output = new FileOutputStream(outFile);

int temp = 0;

while((temp = input.read()) != -1){

output.write(temp);

}

}

} catch (Exception e) {

e.printStackTrace();

}finally{

try {

input.close();

output.close();

zipInput.close();

zipFile.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

时间: 2024-10-20 10:03:30

java.util.zip包在解压缩文件方面入门使用的相关文章

java架构 [Java 基础] 使用java.util.zip包压缩和解压缩文件

Java API中的import java.util.zip.*;包下包含了Java对于压缩文件的所有相关操作. 我们可以使用该包中的方法,结合IO中的相关知识,进行文件的压缩和解压缩相关操作. ZipFile java中的每一个压缩文件都是可以使用ZipFile来进行表示的. File file = new File("F:/zippath.zip"); ZipFile zipFile = new ZipFile(file); System.out.println("压缩文

[Java 基础] 使用java.util.zip包压缩和解压缩文件

reference :  http://www.open-open.com/lib/view/open1381641653833.html Java API中的import java.util.zip.*;包下包含了Java对于压缩文件的所有相关操作. 我们可以使用该包中的方法,结合IO中的相关知识,进行文件的压缩和解压缩相关操作. ZipFile java中的每一个压缩文件都是可以使用ZipFile来进行表示的. File file = new File("F:/zippath.zip&quo

Java.util.zip 压缩与解压缩工具类

Java.util.zip 提供用于读写标准 ZIP 和 GZIP 文件格式的类. 还包括使用 DEFLATE 压缩算法(用于 ZIP 和 GZIP 文件格式)对数据进行压缩和解压缩的类. 依赖 Jdk 编写该工具类,不依赖任何第三方 jar,随用随取,实现功能大体如下: 1.目录级别递归压缩与解压缩 zip: 2.单文件压缩和解压缩 zip : import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.ZipIn

java.util.zip压缩打包文件总结一:压缩文件及文件下面的文件夹

一.简述 zip用于压缩和解压文件.使用到的类有:ZipEntry  ZipOutputStream 二.具体实现代码 package com.joyplus.test; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.

java I/O解析 及java.util.zip压缩

1.Java I/O框架采用装饰器模式,可按照读写方式分为字节流和字符流,二者根据数据源的不同都封装了不同的类(ByteArray.String.File.Pipe等),FilterInputStream.FilterOutputStream是用来提供装饰器类接口以控制特定输入流和输出流的两个类.字节流和字符流之间可以通过InputStreamReader和OutPutStreamWriter相互转换. 2.常用案例 import java.io.BufferedReader; import j

java.util.zip压缩打包文件总结二: ZIP解压技术

一.简述 解压技术和压缩技术正好相反,解压技术要用到的类:由ZipInputStream通过read方法对数据解压,同时需要通过CheckedInputStream设置冗余校验码,如: CheckedInputStream cis = new CheckedInputStream(new FileInputStream( srcFile), new CRC32()); ZipInputStream zis = new ZipInputStream(cis); 需要注意的是,在构建解压文件时,需要

java.util.zip.ZipException: error in opening zip file

今天项目升级,出现了很奇葩的问题.在本地和测试环境测试好好的,将项目打包成war(每次都这样打包)然后上传到阿里云服务器,启动tomcat一直报如下错误: java.util.zip.ZipException: error in opening zip file at java.util.zip.ZipFile.open(Native Method) at java.util.zip.ZipFile.<init>(ZipFile.java:220) at java.util.zip.ZipFi

java.util.zip

使用java自带的类 java.util.zip进行文件/目录的压缩的话,有一点不足,不支持中文的名件/目录命名,如果有中文名,那么打包就会失败.本人经过一段时间的摸索和实践,发现在一般的Ant.jar类库中也有zip类,import org.apache.tools.zip.*,能够解决不支持中文文件目录的问题,同时,Ant的获得途径也比较多,一般的应用服务器中有这个包,实在不行去下载个tomcat5.X,里面也有ant.jar,本人经过测试,可以使用. 例子如下: import java.i

我的Android进阶之旅------&amp;gt;Android编译错误java.util.zip.ZipException: duplicate entry的解决方法

今天在Android Studio中把另外一个项目引入当前项目,编译的时候出现了java.util.zip.ZipException: duplicate entry错误. 错误例如以下所看到的: FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':watch:packageAllDebugClassesForMultiDex'. > java.util.zip.ZipEx