packagecom.test;importjava.io.BufferedInputStream;importjava.io.ByteArrayInputStream;importjava.io.ByteArrayOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importcom.tool.zip.InflaterInputStream;importcom.tool.zip.ZipEntry;importcom.tool.zip.ZipInputStream;public classTestZip {//private static String tempZip = "f:\\tempZip.zip";
/***
*@paraminput Zip文件的流
*@throwsException*/
public void upload(InputStream input) throwsException {//System.setProperty("sun.zip.encoding",//System.getProperty("sun.jnu.encoding"));
ZipInputStream zis= newZipInputStream(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 = newFile(path);if (!file.exists()) {
file.createNewFile();
toWrite(is, file);
}
}
}
}/*** 向file文件写入字节
*@paramins
*@paramfile*/
public static voidtoWrite(InputStream ins, File file) {try{
OutputStream os= newFileOutputStream(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[]字节
*@paramzis
*@return
*/
public byte[] getByte(InflaterInputStream zis) {try{
ByteArrayOutputStream bout= newByteArrayOutputStream();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();returnbuf;
}catch(IOException e) {
e.printStackTrace();return null;
}
}public staticString join(Object[] o, String flag) {
StringBuffer str_buff= newStringBuffer();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);
}returnstr_buff.toString();
}//test method
public static void main(String[] args) throwsException {
TestZip test= newTestZip();
String filePath= "f:\\test.zip";//File file = new File(filePath);
InputStream input = new BufferedInputStream(newFileInputStream(
filePath));
test.upload(input);
}
}