java zip打包

来源:互联网 发布:韩国人和日本人知乎 编辑:程序博客网 时间:2024/05/17 09:32

<p>额,这是我的第一篇博客,可能写得不是太好,希望阅读到此篇文章的博友们能够理解与支持。</p><p><span style="white-space: pre;"></span>好了,进入正题,我也是一只刚入门的菜鸟,对与各种技术都充满了好奇,也热衷于java啦,对于zip打包。不知道小伙伴们是否也和我一样认为 java 须要第三方jar包才能完成呢?好奇的我,首选百度找啦,当然,这一类的技术文章不少的,于是我也就随便看了一章。怎么说呢看完后我只知道java本身就有了zip打包的支持,其实知道这个也就够了。</p><p>接下来就是靠自己慢慢琢磨和看文档的过程啦。</p><p><span style="white-space: pre;"></span>其实,zip打包还是相当容易的,我相信有点基础的人都是能看的懂的啦,好啦,直接上源码。</p><div></div>
</pre><pre name="code" class="java">package com.zip;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.regex.Matcher;import java.util.regex.Pattern;import java.util.zip.ZipEntry;import java.util.zip.ZipOutputStream;public class ZipEncoder {static FileInputStream fis;static FileOutputStream fos;static ZipOutputStream zos;/** *  * @param src * 需要打包的文件路径,如:E:/test 或,E:/test/ 或 E:/test.txt; * 前两者表示打包 test 目录,后者表示打包 test.txt 文件 * @param dest * 压缩文件的存放路径,如:E:/test.zip *  */public static void encode(String src,String dest){File zipfile=new File(dest);File srcfile=new File(src);if(!srcfile.exists()){System.out.println("源文件不存在");return;}int i=1;//循环判读  要存的文件名是否已存在。while(zipfile.exists()){if(dest.indexOf("(")!=-1&&dest.indexOf(")")!=-1){i++;dest=dest.substring(0,dest.lastIndexOf("("))+"("+i+").zip";}else{dest=dest.substring(0,dest.lastIndexOf(".zip"))+"(1).zip";}zipfile=new File(dest);}try { fos=new FileOutputStream(zipfile); zos=new ZipOutputStream(fos); String base=null; if(srcfile.isDirectory()){if(src.endsWith("/")){src=src.substring(0,src.lastIndexOf("/"));if(src.indexOf("/")!=-1){base=src.substring(src.lastIndexOf("/")+1,src.length())+"/";}else{base=src+"/";}}else{base=src.substring(src.lastIndexOf("/")+1,src.length())+"/";} }else{ base=""; } System.out.println("开始压缩..."); long begin=System.currentTimeMillis(); list(srcfile,base); long end=System.currentTimeMillis(); System.out.println("用时:"+((end-begin)/1000+1)+"秒"); System.out.println("压缩完成!!!");  zos.close(); fos.close(); } catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}private static void list(File file,String base){if(file.exists()){if(file.isDirectory()){File[] files=file.listFiles();if(files==null||files.length<1){return;}for(File f:files)if(f.isDirectory()){list(f,base+f.getName()+"/");}else{ try {fis=new FileInputStream(f);ZipEntry zipEntry=new ZipEntry(base+f.getName());  zos.putNextEntry(zipEntry);  byte[] buf=new byte[1024*10];  int len=0;  System.out.println("正在压缩"+base+f.getName());  while((len=fis.read(buf))!=-1){  zos.write(buf, 0,len);  zos.flush();  //Thread.sleep(10);    } } catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {fis.close();zos.closeEntry();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}else{try {fis=new FileInputStream(file);ZipEntry zipEntry=new ZipEntry(base+file.getName());  zos.putNextEntry(zipEntry);  byte[] buf=new byte[1024*10];  int len=0;  System.out.println("正在压缩"+base+file.getName());  while((len=fis.read(buf))!=-1){  zos.write(buf, 0,len);  zos.flush();  //Thread.sleep(10);  }  } catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {fis.close();zos.closeEntry();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}}
</pre><pre name="code" class="java">代码写的不是很好看,但还是好用的,也没讲究什么效率问题,能达到目的是我现在最大的目标。好拉,说说新手要注意的一些问题吧。
一、带目录一起打包,
<span style="white-space:pre"></span>怎么说呢,也是一个小问题啦,但对于新手来说。不是值得一提的。记得哦,要得上目录一起打包,一定了加上文件路径一起,嗯 ,具体就看源码吧。源码中base是要打包的目录的名称。
</pre><pre name="code" class="java">二、各种输入输出流一定要关闭
</pre><pre name="code" class="java"><span style="white-space:pre"></span>暂且不说安全问题,就程序正确性来说,也强烈要求关闭流。
三、flush
<span style="white-space:pre"></span>一定要记得zos写入后一定要flush一下,否则会有你想不到的结果。
</pre><pre name="code" class="java">好了,就这么滴吧。希望能对你有用。
</pre><pre name="code" class="java">对了。附上测试代码
</pre><pre name="code" class="java"><pre name="code" class="java">package com.zip;public class Test {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubString src="E:/2014-03-22微信开发入门";String dest="E:/test.zip";ZipEncoder.encode(src, dest);}}



0 0
原创粉丝点击