packagecom.jre.util.zip;importjava.io.BufferedInputStream;importjava.io.BufferedOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.util.Enumeration;importjava.util.zip.ZipEntry;importjava.util.zip.ZipFile;importjava.util.zip.ZipInputStream;importjava.util.zip.ZipOutputStream;importcom.jre.io.UtilsIoJre;/*** zip文件处理(压缩处理时通过windows系统压缩的由于编码不是utf8的所以将导致中文抛出异常的情况)
*@authorhuage
**/
public classUtilsZipJre {public static voidmain(String[] args) {
zipFileExtract("C:\\Users\\huage\\Desktop\\test\\111\\111.zip","C:\\Users\\huage\\Desktop\\test\\test");//zipDecompressingExtract("C:\\Users\\huage\\Desktop\\test\\111\\111.zip","C:\\Users\\huage\\Desktop\\test\\test");//zipCompressingExtract("C:\\Users\\huage\\Desktop\\test\\111\\test.zip",new File("C:\\Users\\huage\\Desktop\\test\\test"));
}/*** 解压
*@parampath
*@parampathExtract*/
public static voidzipFileExtract(String path, String pathExtract){
ZipFile zipfile= null;try{
zipfile= newZipFile(path);
Enumeration entries = (Enumeration)zipfile.entries();if( entries!=null){
ZipEntry entry ;
File file;
BufferedInputStream bis= null;while( entries.hasMoreElements()){
entry=entries.nextElement();if(entry.isDirectory())continue;
file=newFile(pathExtract,entry.getName());if(!file.exists()){
(newFile(file.getParent())).mkdirs();
}
UtilsIoJre.converWriteIO(bis, file);//System.out.println(fout+"解压成功");
}
}
}catch(IOException e) {
e.printStackTrace();
}catch(Exception e) {
e.printStackTrace();
}finally{
UtilsIoJre.closeIO(zipfile);
}
}/*** zip解压(本地)(官方自带zip解压无法处理中文)
*
*@parampath
* :zip文件地址
*@parampathExtract
* :解压地址*/
public static voidzipDecompressingExtract(String path, String pathExtract) {
ZipInputStream zipinput= null;
BufferedInputStream bininput= null;try{
zipinput= new ZipInputStream(newFileInputStream(path));
bininput= newBufferedInputStream(zipinput);
ZipEntry entry ;
File fout= null;while ((entry = zipinput.getNextEntry()) != null) {if(entry.isDirectory())continue;
fout=newFile(pathExtract,entry.getName());if(!fout.exists()){
(newFile(fout.getParent())).mkdirs();
}
UtilsIoJre.converWriteIO(bininput, fout);//System.out.println(fout+"解压成功");
}
}catch(FileNotFoundException e) {
e.printStackTrace();
}catch(Exception e) {
e.printStackTrace();
}finally{
UtilsIoJre.closeIO(bininput,zipinput);
}
System.out.println("解压完成");
}/*** zip压缩(本地)
*
*@paramzipFileName
*@paraminputFile
*@throwsException*/
public static voidzipCompressingExtract(String zipFileName, File inputFile) {
ZipOutputStream out= null;
BufferedOutputStream bo= null;try{
out= new ZipOutputStream(newFileOutputStream(zipFileName));
bo= newBufferedOutputStream(out);
zipCompressing(out, inputFile, bo);
}catch(FileNotFoundException e) {
e.printStackTrace();
}catch(Exception e) {
e.printStackTrace();
}finally{
UtilsIoJre.closeIO(bo,out);
}
System.out.println("压缩完成");
}/*** zip压缩
*
*@paramout
*@paramfile
*@parambase
*@parambo
*@throwsException*/
private static void zipCompressing(ZipOutputStream out, File file, BufferedOutputStream bo) throwsException {if(file.isDirectory()) {
File[] fl=file.listFiles();if (fl.length == 0) {
out.putNextEntry(newZipEntry(file.getName()));
}for (int i = 0; i < fl.length; i++) {
zipCompressing(out, fl[i], bo);
}
}else{
out.putNextEntry(newZipEntry(file.getName() ));
UtilsIoJre.converReadIO(bo, file);
}
}
}packagecom.jre.io;importjava.io.BufferedInputStream;importjava.io.BufferedOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;/*** io流处理
*@authorhuage
**/
public classUtilsIoJre {/*** 将file写入BufferedOutputStream中
*@parambo
*@paramfile
*@throwsException*/
public static void converReadIO(BufferedOutputStream bo,File file) throwsException{
FileInputStream in= newFileInputStream(file);
BufferedInputStream bi= newBufferedInputStream(in);intb;while ((b = in.read()) != -1) {
bo.write(b);
}
closeIO(bi,in);
bo.flush();//清空缓存
}/*** 将BufferedInputStream写入file中
*@parambo
*@paramfile
*@throwsException*/
public static void converWriteIO(BufferedInputStream bininput,File file) throwsException{
FileOutputStream out= newFileOutputStream(file);
BufferedOutputStream bout= newBufferedOutputStream(out);intb;while ((b = bininput.read()) != -1) {
bout.write(b);
}
closeIO(bout,out);
bout.flush();//清空缓存
}/*** 关闭io
*@paramcl*/
public static voidcloseIO(AutoCloseable... cl){if( cl == null || cl.length == 0 )return;for(AutoCloseable c : cl) {try{
c.close();
}catch(Exception e) {
e.printStackTrace();
}
}
}
}