天天看點

java代碼壓縮檔案_使用Java代碼壓縮檔案或檔案夾

package report.util;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import org.apache.tools.zip.ZipEntry;

import org.apache.tools.zip.ZipOutputStream;

public class ReportUtils {

public static File zip(File srcFile){

File destFile = null;

if(srcFile != null){

destFile = new File(srcFile.getParent()+"\\"+srcFile.getName().split("\\.")[0]+".zip");

if(srcFile.isDirectory()){

zipFolder(srcFile,destFile);

}else{

zipFile(srcFile,destFile);

}

}

return destFile;

}

public static void zipProcess(ZipOutputStream out, File file, String base) throws Exception {

if (file.isDirectory()) {

File[] fl = file.listFiles();

out.putNextEntry(new ZipEntry(base + "/"));

base = base.length() == 0 ? "" : base + "/";

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

zipProcess(out, fl[i], base + fl[i].getName());

}

}else {

out.putNextEntry(new ZipEntry(base));

FileInputStream in = new FileInputStream(file);

int b;

while ( (b = in.read()) != -1) {

out.write(b);

}

in.close();

}

}

public static void zipFolder(File srcFile, File destFile){

ZipOutputStream out = null;

try {

out = new ZipOutputStream(new FileOutputStream(destFile));

out.setLevel(9);

out.setEncoding("GBK");// 指定編碼為gbk,否則部署到linux下會出現亂碼

zipProcess(out, srcFile, "");

}catch (Exception e) {

e.printStackTrace();

}finally{

try {

if(out != null){

out.close() ;

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

public static void zipFile(File srcFile, File destFile){

ZipOutputStream out = null;

FileInputStream in = null;

try {

out = new ZipOutputStream(new FileOutputStream(destFile));

out.setLevel(9);

out.setEncoding("GBK");// 指定編碼為gbk,否則部署到linux下會出現亂碼

in = new FileInputStream(srcFile);

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

int length;

byte[] buffer = new byte[1024];

while ((length = in.read(buffer,0,1024)) != -1){

out.write(buffer, 0, length);

}

} catch (Exception e) {

e.printStackTrace();

}finally{

try {

if(in != null){

in.close();

}

if(out != null){

out.close() ;

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

}