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
- java实现zip打包
- java zip打包
- java 打包zip文件
- java 打包Zip文件
- Java实现ZIP打包
- JAVA文件打包ZIP
- java zip打包
- 用java打包成zip
- JAVA ZIP压缩打包下载
- 下载文件打包 zip java
- java将文件打包成zip文件
- java zip打包与乱码的解决
- java打包ZIP包,带密码
- java实现将多个文件打包成zip
- java实现多文件打包成zip
- java打包文件生成zip压缩包
- java将文件打包为zip
- 打包ZIP
- 最近公共祖先LCA Tarjan算法
- 创建mysql用户
- c++中的左值与右值
- [Python] The attribute with dynamic __dict__
- PHP SESSION 详解
- java zip打包
- android仿微信相册的效果
- jpa 分页功能1
- poj 2777 Count Color 线段树
- 绑定图片
- 字符串的朴素匹配与KMP匹配
- $.ajax()方法详解
- flex常见组件背景及边框颜色实例
- VMware workstation 10 英文版设置