Java--解压缩zip包
Test.java
import java.io.IOException;
public class Test {
public static void main(String[] args) throws IOException, Exception {
String srcPath = "E:\\zhanglong.zip";
String dstPath = "E:\\zhanglong";
Decompression.unZip(srcPath, dstPath);
}
}
Decompression.java
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
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.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream; public class Decompression { //解压gzip数据
public static String unGzip(InputStream is){
String result = null;
GZIPInputStream in = null;
ByteArrayOutputStream arrayOutputStream = null;
try {
in = new GZIPInputStream(is);
arrayOutputStream = new ByteArrayOutputStream();
int len = -1;
byte[] buffer = new byte[Constant.BUFFER];
while ((len = in.read(buffer)) != -1) {
arrayOutputStream.write(buffer, 0, len);
}
result = new String(arrayOutputStream.toByteArray(), Constant.UTF);
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(in != null){
in.close();
}
if(arrayOutputStream != null){
arrayOutputStream.close();
}
if(is != null){
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
} //压缩gzip数据
public static byte[] gzip(String data, String charset) {
byte[] b = null;
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(bos);
gzip.write(data.getBytes(charset));
gzip.finish();
gzip.close();
b = bos.toByteArray();
bos.close();
} catch (Exception ex) {
ex.printStackTrace();
}
return b;
} /**************************************************/
//解压zip压缩包
public static boolean unZip(String srcPath, String dstPath) {
boolean isUnzipSuccess = false;
boolean isDstFormat = false;
int count = -1;
int index = -1;
File dstFolder = new File(dstPath);
if(!dstFolder.exists()) dstFolder.mkdirs();
FileInputStream fis = null;
ZipInputStream zis = null;
FileOutputStream fos = null;
BufferedOutputStream bos = null;
try {
ZipEntry entry = null;
fis = new FileInputStream(srcPath);
zis = new ZipInputStream(new BufferedInputStream(fis)); while ((entry = zis.getNextEntry()) != null) {
byte[] data = new byte[Constant.BUFFER * 10];
String temp = entry.getName();
isDstFormat = isDstFormat(temp);
if(!isDstFormat)
continue; index = temp.lastIndexOf("/");
if (index > -1) temp = temp.substring(index + 1);
temp = dstPath + File.separator + temp; File file = new File(temp);
file.createNewFile(); fos = new FileOutputStream(file);
bos = new BufferedOutputStream(fos, Constant.BUFFER * 10); while ((count = zis.read(data, 0, Constant.BUFFER * 10)) != -1) {
bos.write(data, 0, count);
} bos.flush();
}
isUnzipSuccess = true;
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
if(bos != null) bos.close();
if(fos != null) fos.close();
if(zis != null) zis.close();
if(fis != null) fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return isUnzipSuccess;
} public static boolean isDstFormat(String filename){
boolean isDstFormat = false;
boolean isEndWithOgg = filename.endsWith(Constant.OGG);
boolean isEndWidthPack = filename.endsWith(Constant.PACK);
boolean isEndWidthPng = filename.endsWith(Constant.PNG);
boolean isEndWidthMp3 = filename.endsWith(Constant.MP3);
boolean isEndWidthTmx = filename.endsWith(Constant.TMX);
boolean isEndWidthProperties = filename.endsWith(Constant.PROPERTIES);
if( isEndWithOgg || isEndWidthPack || isEndWidthMp3 || isEndWidthPng || isEndWidthTmx || isEndWidthProperties)
isDstFormat = true; return isDstFormat;
}
}
FileOperate.java
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List; public class FileOperate {
/**
* 在指定路径下创建新文件
* @param filePath 文件路径
* @return
* @throws IOException
*/
public static File createFile(String filePath, boolean isDeleteAllFiles) {
String parentPath = filePath.substring(0, filePath.lastIndexOf(File.separator));
createFolders(parentPath, isDeleteAllFiles);
File file = new File(filePath);
try {
if(!file.createNewFile()){
file.delete();
file.createNewFile();
}
} catch (IOException e) {
e.printStackTrace();
}
return file;
} /**
* 判断配置文件是否存在
* @param filePath 文件路径
* @return
*/
public static boolean isFileExist(String filePath){
File file = new File(filePath);
return file.exists();
} /**
* 取得指定目录下的所有文件夹名
* @return
*/
public static List<String> getFilesName(String filePath){
List<String> files_name = null;
File file = new File(filePath);
if(file.exists()){
files_name = new ArrayList<String>();
File[] files = file.listFiles();
for (File file2 : files) {
if(file2.isDirectory()){
files_name.add(file2.getName());
}
}
}
return files_name;
} public static void deleteFiles(File file){
if(file.exists()){
File[] files = file.listFiles();
for(File f : files){
if(f.isFile()) f.delete();
}
}
} public static File createFolders(String path, boolean isDeleteAllFiles){
File file = new File(path);
if(file.exists() && file.isDirectory()){
if(isDeleteAllFiles) deleteFiles(file);
}else{
file.mkdirs();
}
return file;
} public static boolean deleteFile(String filePath){
boolean isDeleted = false;
File file = new File(filePath);
if(file.exists()){
if(file.isFile()) {
file.delete();
isDeleted = true;
}
}
return isDeleted;
} public static void deleteMkdir(String filePath){
File file = new File(filePath);
if(file.exists() && file.isDirectory()){
file.delete();
}
} /*********删除文件夹******/
public static boolean deleteFolders(String filePath){
boolean isDeleteSuccess = false;
LinkedList<String> folderList = new LinkedList<String>();
folderList.add(filePath); while(folderList.size() > 0){
File file1 = new File(folderList.poll());
File[] files1 = file1.listFiles();
ArrayList<File> fileList = new ArrayList<File>();
for(int i = 0; i < fileList.size(); i++){
if(files1[i].isDirectory()){
folderList.add(files1[i].getPath());
}else{
fileList.add(files1[i]);
}
}
//删除文件
for(File file : fileList){
file.delete();
}
} //删除文件夹
folderList = new LinkedList<String>();
folderList.add(filePath);
while(folderList.size() > 0){
File file2 = new File(folderList.getLast());
if(file2.delete()){
folderList.removeLast();
}else{
File[] files2 = file2.listFiles();
for(int i = 0; i < files2.length; i++){
folderList.add(files2[i].getPath());
}
}
}
if(folderList.size() == 0) isDeleteSuccess = true;
return isDeleteSuccess;
} public static boolean moveFile(String srcFilePath, String dstFilePath){
boolean isMoveFileSuccess = false; BufferedInputStream bis = null;
BufferedOutputStream bos = null;
FileInputStream fis = null;
FileOutputStream fos = null;
try {
if(isFileExist(dstFilePath)) deleteFile(dstFilePath);
File dstFile = createFile(dstFilePath, false);
fis = new FileInputStream(new File(srcFilePath));
fos = new FileOutputStream(dstFile);
bis = new BufferedInputStream(fis);
bos = new BufferedOutputStream(fos, Constant.BUFFER * 10);
int count = -1;
byte[] buffer = new byte[Constant.BUFFER * 10];
while((count = bis.read(buffer, 0, Constant.BUFFER * 10)) != -1){
bos.write(buffer, 0, count);
bos.flush();
}
isMoveFileSuccess = true;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(bos != null){
bos.close();
}
if(fos != null){
fos.close();
}
if(bis != null){
bis.close();
}
if(fis != null){
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return isMoveFileSuccess;
}
}
Constant.java
public class Constant {
public static final int BUFFER = 1024;
public static final String UTF = "utf-8";
public static final String OGG = ".ogg";
public static final String PACK = ".pack";
public static final String PNG = ".png";
public static final String MP3 = ".mp3";
public static final String PROPERTIES = ".properties";
public static final String TMX = ".tmx";
}
测试包:
http://download.csdn.net/detail/zlqqhs/5943973
Java--解压缩zip包的更多相关文章
- [Java 基础] 使用java.util.zip包压缩和解压缩文件
reference : http://www.open-open.com/lib/view/open1381641653833.html Java API中的import java.util.zip ...
- java生成zip包兼容Linux
/* 这个方法只用在windows中用服务器为Linux就不行 */ package common.util; import java.io.File;import java.io.FileInput ...
- java解压缩zip和rar的工具类
package decompress; import java.io.File; import java.io.FileOutputStream; import org.apache.tools.an ...
- java解压缩zip
依赖的包: <!-- https://mvnrepository.com/artifact/org.apache.ant/ant --> <dependency> <gr ...
- java 解压缩Zip文件 ziputil
package com.lanyuan.assembly.util; import java.io.BufferedOutputStream;import java.io.File;import ja ...
- java zip API实现压缩和解压缩zip包
package zip; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io ...
- java中ant包中的org.apache.tools.zip实现压缩和解压缩
其实apache中的ant包(请自行GOOGLE之ant.jar)中有一个更好的类,已经支持中文了,我们就不重复制造轮子了,拿来用吧,这里最主要的功能是实现了 可以指定多个文件 到同一个压缩包的功能 ...
- IO操作之使用zip包压缩和解压缩文件
转自:http://www.cdtarena.com/java.htmlJava API中的import java.util.zip.*;包下包含了Java对于压缩文件的所有相关操作. 我们可以使 ...
- Java用ZIP格式压缩和解压缩文件
转载:java jdk实例宝典 感觉讲的非常好就转载在这保存! java.util.zip包实现了Zip格式相关的类库,使用格式zip格式压缩和解压缩文件的时候,须要导入该包. 使用zipoutput ...
- java.util.zip压缩打包文件总结一:压缩文件及文件下面的文件夹
一.简述 zip用于压缩和解压文件.使用到的类有:ZipEntry ZipOutputStream 二.具体实现代码 package com.joyplus.test; import java.io ...
随机推荐
- [LOJ#2980][THUSCH2017]大魔法师(线段树+矩阵)
每个线段树维护一个行向量[A,B,C,len]分别是这个区间的A,B,C区间和与区间长度,转移显然. 以及此题卡常,稍微哪里写丑了就能100->45. #include<cstdio> ...
- zoj 2587 判断最小割的唯一性
算法: 先求出残量网络,计算出从src能够到的点集A,再求出能够到dst的点集B,如果所有点都被访问到了,那么割就是唯一的,即(A,B),否则(A,V-A)和(V-B,B)都是最小割. (注意因为割的 ...
- lua协程----ngx-lua线程学习笔记
--[[ - @desc lua数据输出 - @param string 字符串 - return string --]] function dump(v) if not __dump then fu ...
- VC6配置sqlite数据库
SQLite官方下载只提供给我们一个sqlite3.dll跟一个sqlite3.def文件,并没有提供用于VC++6.0的lib文件,可以利用sqlite3.def文件生成,步骤如下: 1.下载DLL ...
- 什么叫NAT,设置NAT的两个方法
NAT是网络地址翻译就是把公网IP翻译成私有地址, 又叫端口映射或端口转发. 采用路由方式是指ADSL拥有一个动态或固定的公网IP,ADSL直接接在HUB或交换机上,所有的电脑共享上网.这时ADSL的 ...
- C#软件license管理(简单软件注册机制)
最近做了一个绿色免安装软件,领导临时要求加个注册机制,不能让现场工程师随意复制.事出突然,只能在现场开发(离开现场软件就不受我们控了).花了不到两个小时实现了简单的注册机制,稍作整理. ...
- 多线程调试必杀技 - GDB的non-stop模式
作者:破砂锅 (转) 开源的GDB被广泛使用在Linux.OSX.Unix和各种嵌入式系统(例如手机),这次它又带给我们一个惊喜. 多线程调试之痛 调试器(如VS2008和老版GDB)往往只支持a ...
- as 汇编器
[root@localhost ~]# cat .s .file "write.s" .section .rodata hello: .string "hello, wo ...
- 使用Bootstrap 3开发响应式网站实践06,使用ListGroup、Thumbnails展示内容
□ ListGroup展示内容 当希望把同类型的内容以列表.区块展示的时候,ListGroup是不错的选择. <div class="col-sm-6"> <h3 ...
- 服务器返回的“未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0提供程序””错误解决
未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0提供程序”