java 解压缩文件

来源:互联网 发布:手机淘宝 如何收藏店铺 编辑:程序博客网 时间:2024/04/28 03:28

需要用到apache的ant.jar文件:

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 java.util.Enumeration;import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipFile;import org.apache.tools.zip.ZipOutputStream;/** * ZIP文件压缩和解压(要使用apache ant.jar以处理中文乱码) * @author admin_Hzw * */@SuppressWarnings("unchecked")public class ZipUtil {/** * 压缩文件file成zip文件zipFile *  * @param file *            要压缩的文件 * @param zipFile *            压缩文件存放地方 * @throws Exception */public static void zip(File file, File zipFile) throws Exception {ZipOutputStream output = null;try {output = new ZipOutputStream(new FileOutputStream(zipFile));// 顶层目录开始zipFile(output, file, "");} catch (Exception ex) {ex.printStackTrace();} finally {// 关闭流if (output != null) {output.flush();output.close();}}}/** * 压缩文件为zip格式 *  * @param output *            ZipOutputStream对象 * @param file *            要压缩的文件或文件夹 * @param basePath *            条目根目录 * @throws IOException */private static void zipFile(ZipOutputStream output, File file,String basePath) throws IOException {FileInputStream input = null;try {// 文件为目录if (file.isDirectory()) {// 得到当前目录里面的文件列表File list[] = file.listFiles();basePath = basePath + (basePath.length() == 0 ? "" : "/")+ file.getName();// 循环递归压缩每个文件for (File f : list)zipFile(output, f, basePath);} else {// 压缩文件basePath = (basePath.length() == 0 ? "" : basePath + "/")+ file.getName();// System.out.println(basePath);output.putNextEntry(new ZipEntry(basePath));input = new FileInputStream(file);int readLen = 0;byte[] buffer = new byte[1024 * 8];while ((readLen = input.read(buffer, 0, 1024 * 8)) != -1)output.write(buffer, 0, readLen);}} catch (Exception ex) {ex.printStackTrace();} finally {// 关闭流if (input != null)input.close();}}/** * 解压zip文件 *  * @param zipFilePath *            zip文件绝对路径 * @param unzipDirectory *            解压到的目录 * @throws Exception */public static void unzip(String zipFilePath, String unzipDirectory)throws Exception {// 定义输入输出流对象InputStream input = null;OutputStream output = null;try {// 创建文件对象File file = new File(zipFilePath);// 创建zip文件对象ZipFile zipFile = new ZipFile(file);File unzipFile = new File(unzipDirectory);if (unzipFile.exists())  unzipFile.delete();unzipFile.createNewFile();  // 得到zip文件条目枚举对象Enumeration zipEnum = zipFile.getEntries();// 定义对象ZipEntry entry = null;String entryName = null, path = null;String names[] = null;int length;// 循环读取条目while (zipEnum.hasMoreElements()) {// 得到当前条目entry = (ZipEntry) zipEnum.nextElement();entryName = new String(entry.getName());// 用/分隔条目名称names = entryName.split("\\/");length = names.length;path = unzipFile.getAbsolutePath();for (int v = 0; v < length; v++) {if (v < length - 1) // 最后一个目录之前的目录FileUtil.createDirectory(path += "/" + names[v] + "/");else { // 最后一个if (entryName.endsWith("/")) // 为目录,则创建文件夹FileUtil.createDirectory(unzipFile.getAbsolutePath()+ "/" + entryName);else { // 为文件,则输出到文件input = zipFile.getInputStream(entry);output = new FileOutputStream(new File(unzipFile.getAbsolutePath()+ "/" + entryName));byte[] buffer = new byte[1024 * 8];int readLen = 0;while ((readLen = input.read(buffer, 0, 1024 * 8)) != -1)output.write(buffer, 0, readLen);}}}}} catch (Exception ex) {ex.printStackTrace();} finally {// 关闭流if (input != null)input.close();if (output != null) {output.flush();output.close();}}}public static void main(String[] args) throws Exception {String path = "D:/temp/ipconfig";  //源文件路径zip(new File(path+".txt"), new File(path+".zip"));  //压缩文件unzip(path+".zip", "C://temp"); //解压      }} 

文件工具类:

import java.io.File;/** * 文件工具类 * @author admin_Hzw * */public class FileUtil {public static void createDirectory(String path) throws Exception{File f = new File(path);if(!f.exists()){f.createNewFile(); }}}