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++实现
冒泡排序(高级版)之C++实现 一.源代码:BubbleSortHigh.cpp #include<iostream> using namespace std; /*定义输出一维数组的函数 ...
- Android之安全机制
根据android四大框架来解说安全机制 代码安全 java不同于C/C++,java是解释性语言,存在代码被反编译的隐患: 默认混淆器为proguard,最新版本为4.7: proguard还可用来 ...
- LeetCode:删除排序数组中的重复项 (Remove Duplicates from Sorted Array)
public class RemoveDuplicates { /** * 修改数组,使数组有序不重复.超出长度不考虑. * @param 排序数组 * @return 数组不重复数的个数 */ pu ...
- sgu 261
学习了元根的一些知识,哈哈. 总结一下: 几个概念: 阶:对于模数m和整数a,并且gcd(m,a)==1,那么定义a在模m下的阶r为满足ar=1 mod m的最小正整数. 性质1:r in [1,ph ...
- CDOJ 838 母仪天下 树状数组 (2014数据结构专题
母仪天下 Time Limit: 1 Sec Memory Limit: 162 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/838 Descrip ...
- [分享]2013:Linux的黄金之年-十大杰出成就
2013年已经过去.这一年见证了许多里程碑事件,使得2013年可以称得上是一个Linux的黄金之年.其中一些成果在FOSS和Linux世界更可以称得上是举世瞩目的成就. 1.Android的上升趋势 ...
- WPF中的ImageBrush常用方式
WPF的ImageBrush是一个比较常见也比较复杂的笔刷,它继承自图块笔刷(TileBrush).使用图块画笔绘制区域涉及以下三个组成部分:内容.基本图块和输出区域.基本输出过程如下图所示: 其中, ...
- The sigrok project
http://www.sigrok.org/wiki/Main_Page The sigrok project aims at creating a portable, cross-platform, ...
- c#分页工具类,完美实现List分页
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace Proje ...
- js单例模式详解实例
这篇文章主要介绍了什么是单例单例模式.使用场景,提供了3个示例给大家参考 什么是单例? 单例要求一个类有且只有一个实例,提供一个全局的访问点.因此它要绕过常规的控制器,使其只能有一个实例,供使用者使用 ...