代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
解压压缩 zip文件
作者:
wzfz
/ 发布于
2015/7/9
/
714
项目中用到对文件解压,压缩。于是自己就编写了一段,当然好像有个zip4j 的jar包。提供了更多的功能。自己写的好处是没有依赖的问题,理解了ZipEntry 对编写代码有一定帮助(与Map.Entry类似)。 其实就是说其中的文件的意思。
import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; public class ZipUtil { public static void unZip(String src,String target) throws IOException{ ZipInputStream zipIn=null; ZipFile zip=null; try { zipIn = new ZipInputStream(new FileInputStream(src)); ZipEntry in=null; zip=new ZipFile(src); while((in=zipIn.getNextEntry())!=null){ File file=new File(target+in.getName()); if(in.getName().endsWith("/")){ file.mkdirs(); } else{ byte[] b=IOUtil.getByteByInputStream(zip.getInputStream(in)); if(!new File(file.getParent()).exists()){ new File(file.getParent()).mkdirs(); } FileOutputStream fout=new FileOutputStream(file); fout.write(b); fout.close(); } } zip.close(); } finally{ if(zipIn!=null){ zipIn.close(); } if(zip!=null){ zip.close(); } } } public static void inZip(List<File> files,String basePath,String target) throws IOException{ List<File> cfiles=new ArrayList<File>(); for (File file : files){ cfiles.add(file); } for (File file : cfiles) { if(file.isDirectory()){ IOUtil.getAllFiles(file.toString(), files); } } ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(target)); for (File file : files) { System.out.println(file); ZipEntry entry = null; byte[] b = new byte[1024]; int len = 0; if (file.isFile()) { entry = new ZipEntry(file.toString().substring(basePath.length())); zos.putNextEntry(entry); InputStream is = new BufferedInputStream(new FileInputStream(file)); while ((len = is.read(b, 0, b.length)) != -1) { zos.write(b, 0, len); } is.close(); } else{ } } zos.close(); } public static void main(String[] args) { try { List<File> files=new LinkedList<File>(); files.add(new File("D:/tmp")); files.add(new File("D:/t2.jpg")); inZip(files,"D:/","D:/1.zip"); unZip("D:/1.zip", "D:/tmp/"); } catch (IOException e) { e.printStackTrace(); } } } 2. [代码]依赖的IOUtil ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.util.List; public class IOUtil { public static final byte[] getByteByInputStream(InputStream in) { ByteArrayOutputStream bout = new ByteArrayOutputStream(); byte[] tempByte = new byte[1024]; try { int length = 0; while ((length = in.read(tempByte)) != -1) { bout.write(tempByte, 0, length); } } catch (IOException e) { e.printStackTrace(); } finally { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } return bout.toByteArray(); } public static final String getStringInputStream(InputStream in) { try { return new String(getByteByInputStream(in),"UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return null; } public static final void getAllFiles(String path, List<File> files) { getAllFilesByProfix(path, null, files); } public static final void getAllFilesByProfix(String path, String suffix, List<File> files) { File file = new File(path); if (file.isDirectory()) { File[] fs = file.listFiles(); if (fs != null) { for (File file2 : fs) { if (file2.isDirectory()) { getAllFilesByProfix(file2.getPath(), suffix, files); } else { if (suffix != null) { if (file2.toString().endsWith(suffix)) { files.add(file2); } } else { files.add(file2); } } } } } else { if (suffix != null) { if (file.toString().endsWith(suffix)) { files.add(file); } } else { files.add(file); } } } public static void moveOrCopy(String filer,String tag,boolean isMove) { System.out.println(filer); File f=new File(filer); if(f.isDirectory()) { File fs[]=new File(filer).listFiles(); tag=tag+"/"+f.getName(); new File(tag).mkdirs(); for(File fl:fs) { if(fl.isDirectory()) { moveOrCopy(fl.toString(),tag,isMove); } else { moveOrCopyFile(fl.toString(),tag+"/"+fl.getName(),isMove); } } } else{ moveOrCopyFile(f.toString(),tag+"/"+f.getName(),isMove); } } public static void writeStrToFile(String str,File file){ writeBytesToFile(str.getBytes(), file); } public static void writeBytesToFile(byte[] bytes,File file){ try { FileOutputStream out = new FileOutputStream(file); out.write(bytes); out.close(); } catch (IOException e) { e.printStackTrace(); } } public static void moveOrCopyFile(String src, String tag, boolean isMove) { try { long s = System.currentTimeMillis(); File f = new File(src); FileInputStream in = new FileInputStream(f); new File(tag).getParentFile().mkdirs(); FileOutputStream out = new FileOutputStream(tag); // 小于1M(大小根据自己的情况而定)的文件直接一次性写入。 byte[] b = new byte[1024]; int length = 0; while ((length = in.read(b)) != -1) { out.write(b, 0, length); } // 一定要记得关闭流额。 不然其他程序那个文件无法进行操作 in.close(); out.close(); System.out.println(System.currentTimeMillis() - s); if (isMove) { f.delete(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
试试其它关键字
解压
压缩
zip文件
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
wzfz
贡献的其它代码
(
8
)
.
防刷新的倒计时
.
点击返回键时恢复被AJAX更改过的数据
.
解压压缩 zip文件
.
实现事件机制实例分析
.
统计大文件行数
.
偏函数使用
.
防刷新的倒计时
.
Java 解压,压缩 zip文件
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3