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 ...
随机推荐
- C# String.Format 格式化字符串 数字/时间
首先献给只想知道结果的人 格式化 DateTime 对象 标准 数字 格式化 Int Decimal Float Double 关于这一块一直不是很清楚,MSDN 上也不够清晰. 就花了点时间敲了一下 ...
- luoguP4336 [SHOI2016]黑暗前的幻想乡 容斥原理 + 矩阵树定理
自然地想到容斥原理 然后套个矩阵树就行了 求行列式的时候只有换行要改变符号啊QAQ 复杂度为\(O(2^n * n^3)\) #include <cstdio> #include < ...
- BZOJ.4516.[SCOI2016]幸运数字(线性基 点分治)
题目链接 线性基可以\(O(log^2)\)暴力合并.又是树上路径问题,考虑点分治. 对于每个点i求解 LCA(u,v)==i 时的询问(u,v),只需求出这个点到其它点的线性基后,暴力合并. LCA ...
- 【数论】【扩展欧几里得】Codeforces Round #484 (Div. 2) E. Billiard
题意:给你一个台球桌面,一个台球的初始位置和初始速度方向(只可能平行坐标轴或者与坐标轴成45度角),问你能否滚进桌子四个角落的洞里,如果能,滚进的是哪个洞. 如果速度方向平行坐标轴,只需分类讨论,看它 ...
- 关于mysql_connect CLIENT_MULTI_RESULTS
自己写了一个mysql存储过程,以为php有用于调用存储过程的内建函数,查了一下发现只能用mysql_query(call pro())这样的方式,我认为从本质上也就相当于在mysql命令行里执行语句 ...
- Educational Codeforces Round 13 B. The Same Calendar 水题
B. The Same Calendar 题目连接: http://www.codeforces.com/contest/678/problem/B Description The girl Tayl ...
- HDU 2553 N皇后问题(深搜DFS)
N皇后问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- Codeforces Round VK Cup 2015 - Round 1 (unofficial online mirror, Div. 1 only)E. The Art of Dealing with ATM 暴力出奇迹!
VK Cup 2015 - Round 1 (unofficial online mirror, Div. 1 only)E. The Art of Dealing with ATM Time Lim ...
- Codeforces Round #287 (Div. 2) B. Amr and Pins 水题
B. Amr and Pins time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- Opencv各版本的配置
OpenCV 2.49 + VS2012 配置指南 首先下载 OpenCV2.4.9 源码: 一. 配置系统环境变量 1. 将源码解压到指定目录: 2. 将 opencv 添加到系统环境变量: ...