大家好,欢迎来到IT知识分享网。
在使用zip格式压缩、解压缩时, 压缩可以使用ZipEntry类和ZipOutPutStream类;解压缩可以使用ZipEntry类和ZipInPutStream类
ZipEntry对象:“/”结尾,则为文件夹,否则为文件。
package com.web.test; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; 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; import java.util.zip.ZipOutputStream; public class TestZiP {
/* * 文件压缩 * files:要压缩的文件,以文件名数组的形式传参 * destZip:压缩之后zip文件所存在的目录,需要"D:\\"或"D:\\test\"格式 * */ public static void zip(String[] files,String destZip){
FileOutputStream fos = new FileOutputStream(destZip); BufferedOutputStream bos = new BufferedOutputStream(fos); ZipOutputStream zos = new ZipOutputStream(bos); /*循环读取文件,压缩到zip中*/ BufferedInputStream bis = null; FileInputStream fis = null; try {
for (int i = 0; i < files.length; i++) {
String file = files[i]; fis = new FileInputStream(file); bis = new BufferedInputStream(fis); /*获取文件名,创建条目并添加到zip中*/ File f = new File(file); ZipEntry z1 = new ZipEntry(f.getName()); zos.putNextEntry(z1); /*读取文件中的字节信息,压入条目*/ int tmp = -1; while((tmp = bis.read()) != -1){
/*写入到目标zip中*/ zos.write(tmp); } //todo 这里要关闭流哦 } } catch (IOException e) {
e.printStackTrace(); }finally{
try {
zos.closeEntry(); } catch (IOException e) {
e.printStackTrace(); } try {
bis.close(); } catch (IOException e) {
e.printStackTrace(); } try {
fis.close(); } catch (IOException e) {
e.printStackTrace(); } } try {
zos.close(); } catch (IOException e) {
e.printStackTrace(); } try {
bos.close(); } catch (IOException e) {
e.printStackTrace(); } try {
fos.close(); } catch (IOException e) {
e.printStackTrace(); } } /* * 文件解压缩 * zipfile:要解压缩的zip文件 * destpath:解压后文件所放的目录,需要"D:\\"或"D:\\test\"格式 * */ public static void unzip(String zipfile,String destpath) throws FileNotFoundException,IOException{
/* String zipfile = "C:\\Users\\shitb\\Desktop\\jacob_1.9.zip"; String destpath = "D:\\test\\"; */ FileInputStream fis = new FileInputStream(zipfile); ZipInputStream zis = new ZipInputStream(fis); ZipEntry z1 = null; while((z1 = zis.getNextEntry()) != null){
if (z1.isDirectory()) {
File f = new File("D:\\"+z1.getName()); f.mkdirs(); }else {
String fileName = z1.getName(); FileOutputStream fos = new FileOutputStream(destpath+fileName); int tmp = -1; while((tmp = zis.read()) != -1){
/*写入到目标文件中*/ fos.write(tmp); } zis.closeEntry(); fos.close(); } } zis.close(); } /* * 目录压缩 * zipFileName:压缩后zip文件的路径 * inputFile:需要压缩的源目录; * */ public void zip(String zipFileName,String inputFile) throws IOException{
File file = new File(inputFile); FileOutputStream fos = new FileOutputStream(zipFileName); ZipOutputStream out = new ZipOutputStream(fos); zipDir(out,file,""); out.close(); } /* *递归遍历子目录和文件,进行压缩 * */ private void zipDir(ZipOutputStream out, File file, String base) throws IOException {
if (file.isDirectory()) {
File[] files = file.listFiles(); out.putNextEntry(new ZipEntry(base+"/")); base = base.length()==0?"":base+"/"; for (int i = 0; i < files.length; i++) {
/*进行递归*/ zipDir(out,files[i], base+files[i].getName()); } }else {
out.putNextEntry(new ZipEntry(base)); FileInputStream fis = new FileInputStream(file); int len = 0; while((len = fis.read()) != -1){
/*写入到目标zip中*/ out.write(len); } fis.close(); } } /* * 解压缩目录 * zipFileName:需要解压缩的zip文件 * outputDirectory:解压缩后文件所放路径 * */ public void unzipDir(String zipFileName,String outputDirectory) throws IOException{
FileInputStream fis = new FileInputStream(zipFileName); ZipInputStream zis = new ZipInputStream(fis); ZipEntry zipEntry; while((zipEntry = zis.getNextEntry()) != null){
if (zipEntry.isDirectory()) {
String name = zipEntry.getName(); name = name.substring(0,name.length()-1); File f = new File(outputDirectory+File.separator+name); f.mkdir(); }else {
File f = new File(outputDirectory+File.separator+zipEntry.getName()); f.createNewFile(); FileOutputStream fos = new FileOutputStream(f); int len = 0; while((len = zis.read()) != -1){
/*写入到目标文件中*/ fos.write(len); } fos.close(); } } zis.close(); } }
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/112171.html