说明:由于我们的日志收集到指定服务器上,会按天压缩成一个zip格式的压缩包,但是有时候需要对这些日志进行处理,人工解压在处理,显示对于大量的日志处理是不行的(效率太低),所以还是要采用程序自动解压效率比较高些。现在就写一个简单例子作为以后参考使用。
一、解压代码:
package ziptofile;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;public class ZipToFile {
//zipPath:压缩包名称所在目录 outFilePath:解压后的文件存放位置
public void zipToFile(String zipPath,String outFilePath) throws Exception{
//压缩包所在路径
FileInputStream fis = new FileInputStream(zipPath);
ZipInputStream zis = new ZipInputStream(fis);
BufferedInputStream bis = new BufferedInputStream(zis);
ZipEntry zipEntry=null;
while((zipEntry=zis.getNextEntry())!=null && !zipEntry.isDirectory()){
File fileOutPath = new File(outFilePath,zipEntry.getName());
if(!fileOutPath.exists()){
//传进来的路径是存在的,但待解压的文件夹及其待解压文件下的文件夹都是在指定输出目录下没有的,这些目录都是需要创建的,所有有多层目录时,使用mkdirs()方法,而不是mkidr()
(new File(fileOutPath.getParent())).mkdirs();
}
//读取压缩包里面的内容
FileOutputStream fos = new FileOutputStream(fileOutPath);
BufferedOutputStream bos = new BufferedOutputStream(fos);
int reads=0;
while((reads=bis.read())!=-1){
bos.write(reads); bos.flush();
}
fos.close();
bos.close();
}
bis.close();
zis.close();
System.out.println("解压成功...");
}}
二、测试代码:
package ziptofile;
public class TestZipToFile {
public static void main(String[] args) throws Exception {
ZipToFile zipToFile = new ZipToFile();
//待解压zip包名称所在路径
String zipPath="D://test//zipRes//002.zip";
//解压出来的结果存放的路径
String outFilePath="D://test//zipRes";
long startTime=System.currentTimeMillis();
zipToFile.zipToFile(zipPath, outFilePath);
//开始进行解压
long endTime=System.currentTimeMillis();
System.out.println("耗费时间: "+(endTime-startTime)+" ms"); }
}