java.util.zip获取Zip文件条目InputStream
package com.test; import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream; import com.tool.zip.InflaterInputStream;
import com.tool.zip.ZipEntry;
import com.tool.zip.ZipInputStream; public class TestZip { //private static String tempZip = "f:\\tempZip.zip";
/**
*
* @param input Zip文件的流
* @throws Exception
*/
public void upload(InputStream input) throws Exception { // System.setProperty("sun.zip.encoding",
// System.getProperty("sun.jnu.encoding")); ZipInputStream zis = new ZipInputStream(input);
ZipEntry entry = null; while ((entry = zis.getNextEntry()) != null) { // System.out.printf("条目信息: 名称%1$b, 大小%2$d, 压缩时间%3$d \n",
// entry.getName(), entry.getSize(), entry.getTime()); if (entry.isDirectory()) { // is dir
// System.out.println(entry.getName() + "是一个目录");
File f = new File("f:" + File.separator + entry.getName());
if (!f.exists())
f.mkdirs();
} else { // byte[] data = getByte(zis); // 获取当前条目的字节数组 InputStream is = new ByteArrayInputStream(data); // 把当前条目的字节数据转换成Inputstream流
String[] names = entry.getName().split("/"); String path = "f:" + File.separator; path += join(names, File.separator); //System.out.println(path);
File file = new File(path);
if (!file.exists()) {
file.createNewFile();
toWrite(is, file);
} }
}
}
/**
* 向file文件写入字节
* @param ins
* @param file
*/
public static void toWrite(InputStream ins, File file) {
try {
OutputStream os = new FileOutputStream(file);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
os.write(buffer, 0, bytesRead);
}
os.close();
ins.close();
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 获取条目byte[]字节
* @param zis
* @return
*/
public byte[] getByte(InflaterInputStream zis) {
try {
ByteArrayOutputStream bout = new ByteArrayOutputStream();
byte[] temp = new byte[1024];
byte[] buf = null;
int length = 0; while ((length = zis.read(temp, 0, 1024)) != -1) {
bout.write(temp, 0, length);
} buf = bout.toByteArray();
bout.close();
return buf;
} catch (IOException e) {
e.printStackTrace();
return null;
}
} public static String join(Object[] o, String flag) {
StringBuffer str_buff = new StringBuffer(); for (int i = 0, len = o.length; i < len; i++) {
str_buff.append(String.valueOf(o[i]));
if (i < len - 1)
str_buff.append(flag);
} return str_buff.toString();
} // test method
public static void main(String[] args) throws Exception {
TestZip test = new TestZip();
String filePath = "f:\\test.zip";
// File file = new File(filePath);
InputStream input = new BufferedInputStream(new FileInputStream(
filePath)); test.upload(input);
}
}
java.util.zip获取Zip文件条目InputStream的更多相关文章
- java.util.Calendar获取时间区间问题
虽然java8的LocalDate已经出来,但是很多项目以及自己习惯上还是使用Date,这里还是简单介绍一下如何通过java.util.Calendar获取时间区间. 1 通过calendar.get ...
- java使用java.util.Properties读取properties文件的九种方法
直接上代码: package com.test.test; import java.io.BufferedInputStream; import java.io.FileInputStream; im ...
- java工具类获取properties文件的配置
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.i ...
- java 使用递归获取指定文件路径目录,删除指定的文件后缀(可扩展,根据具体需要的删除的后缀进行配置)~~
在工作开发过程中,每次用SVN提交代码全选择的时候,发现会产生很多不需要的文件后缀垃圾文件,感觉挺烦人的,一个一个删太麻烦了,如果产生多种后缀文件时,那删起来多费劲,是吧?想想,就写了一段程序通过递归 ...
- java调用ffmpeg获取视频文件信息的一些参数
一.下载ffmpeg http://www.ffmpeg.org/download.html 主要需要bin目录下的ffmpeg可执行文件 二.java代码实现 package com.aw.util ...
- Java反射机制获取Class文件
JAVA反射机制是在运行状态中,对于任意一个类(class文件),都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象方法的功能称为 ...
- Java thymeleaf模板获取资源文件的内容
我们在某些时候可能需要获取配置文件properties中的配置信息,而不需要用Java传给模板,在模板中就可以直接获取 我们需要在resources/下定义国际化配置文件即可,注意名称必须中messa ...
- JAVA利用poi获取world文件内容
本文主要简单介绍了利用poi包,读取world文件内容. 这个依然存在版本的问题,只能读取doc结尾的老版本文件. 话不多说,上代码: import java.io.File; import java ...
- Java基础(十三) 文件高级技术
文件高级技术 一.常见文件类型处理 一)属性文件 属性文件很简单,一行表示一个属性,属性就是键值对,键和值用(=)或者(:)分隔. #ready to work name = tang age = p ...
随机推荐
- [转载]Java数组扩容算法及Java对它的应用
原文链接:http://www.cnblogs.com/gw811/archive/2012/10/07/2714252.html Java数组扩容的原理 1)Java数组对象的大小是固定不变的,数组 ...
- java16
1:List的子类(掌握) (1)List的子类特点 ArrayList: 底层数据结构是数组,查询快,增删慢 线程不安全,效率高 Vector: 底层数据结构是数组,查询快,增删慢 线程安全,效率低 ...
- CFileDialog(文件夹对话框类)和CFontDialog(字体设置对话框类)的使用学习
CFileDialog(文件夹对话框类) 主要用于文件的保存,另存,打开,关闭等功能 功能“另存为”的实现: void CTXTDlg::OnFileSaveas() { LPCTSTR szFilt ...
- 导入excel数据到数据库
1.上传excel到服务器 jsp页面代码 <form action="actionname" method="post" id="form1& ...
- ORACLE简单触发器
因工作需要,尝试写一些建议的触发器,下面为其中一例. //创建一个名为TRG_FIN_OPB_ACCOUNTCARD的触发器 create or replace trigger TRG_FIN_OPB ...
- 【Java EE 学习 27】【oracle学习第一天】
一.oracle 11g安装的注意事项 1.超级管理员密码设置要符合要求(特别是不能以数字打头),否则在创建数据库的时候会产生ora-00922错误以及ora-28000错误. 解决方法:http:/ ...
- 【leetcode】Unique Binary Search Trees (#96)
Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...
- C# 执行文件的根目录 (转)
1.取得控制台应用程序的根目录方法 方法1.Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径方法2.AppDomain.CurrentDomain.Bas ...
- CozyRSS开发记录1-原型图与Grid
CozyRSS开发记录1-原型图与Grid 1.使用MockPlus画出最简陋的原型图 这个界面参考了目前我最常使用的RSS阅读-傲游浏览器的内置RSS阅读器.主体框架划分为上.左下.右下三块,分别是 ...
- SVG实现导航动画
效果图动画后 html <!DOCTYPE html> <html > <head> <meta charset="UTF-8"> ...