用Java实现文件的解压缩

来源:互联网 发布:弯曲正应力电测数据 编辑:程序博客网 时间:2024/05/22 13:13

压缩流:

ZipInputStream(解压),ZipOutoutStream(压缩)来现实Zip的压缩和解压功能。

菜鸟编的代码,有大虾发现不足之处请多多包含~~

package com.shilei.io.解压缩文件;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.util.Enumeration;import java.util.Scanner;import java.util.zip.ZipEntry;import java.util.zip.ZipFile;import java.util.zip.ZipOutputStream;/** * 文件的解压缩 * @author shilei * @category  * @date 2013-4-16 * @time 下午08:29:12 * @version */public class ZipStreamDemo2 {/** * 压缩文件 * @param file      要解压的文件对象 * @param zipFile   压缩到的路径 */private static String path;private static String zipoutpath;public static void zipmethod(File file, String zipFileName)throws Exception {ZipOutputStream zos = null;path = file.getAbsolutePath();// System.out.println("path:"+path);// 判断文件是否文件夹if (!file.isDirectory()) {System.out.println(file.getName() + ":不是文件夹");return;} else {// 获得文件对象的集合File[] files = file.listFiles();if (zos == null) {// ZIP输出流为空则创建新的ZIP输出流FileOutputStream fos = new FileOutputStream(zipFileName);// 创建压缩文件的输出流对象zos = new ZipOutputStream(fos);// 创建新的ZIP输出流}readDir(file, zos);zos.close();}System.out.println("压缩完成...");}/** *  * @param fileDir 要压缩的文件对象        * @param zipOut压缩的ZIP输出流             * @throws Exception */private static void readDir(File fileDir, ZipOutputStream zipOut)throws Exception {// 获得文件内的集合File[] files = fileDir.listFiles();String entryDir;for (File tempfile : files) {if (tempfile.isDirectory())// 是文件夹则递归{readDir(tempfile, zipOut);} else {// 读文件将数据写到压缩包中FileInputStream fis = new FileInputStream(tempfile);BufferedInputStream bis = new BufferedInputStream(fis);// 构建一个压缩条目,和文件名同名entryDir = tempfile.getAbsolutePath().substring(path.indexOf(':') + 2);// System.out.println(entryDir+"-----"+path);ZipEntry entry = new ZipEntry(entryDir);// 向压缩包中放入一个压缩条目zipOut.putNextEntry(entry);byte[] contents = new byte[1024];int end = -1;while ((end = bis.read(contents)) != -1) {// 将读到的数据写到压缩包中相应的条目zipOut.write(contents, 0, end);zipOut.flush();}bis.close();}}}/** * 解压文件 *  * @param file *            指定解压文件的目录 * @param zipFilePath *            要解压的文件的目录 */public static void unZipFile(File file, String zipFilePath)throws Exception {zipoutpath = file.getAbsolutePath();// System.out.println("zipoutpath:"+zipoutpath);// 定义压缩文件ZipFile zipFile = new ZipFile(zipFilePath);// 获得压缩文件的所有目录Enumeration entries = zipFile.entries();// 判断目标文件夹是否存在if (!file.exists()) {file.mkdirs();}while (entries.hasMoreElements()) { // 获得压缩条目的输入流ZipEntry entry = (ZipEntry) entries.nextElement();InputStream fis = zipFile.getInputStream(entry);BufferedInputStream bis = new BufferedInputStream(fis);// 写文件String filepath = zipoutpath.substring(0, 2) + "\\"+ entry.getName();// 建立一个与压缩条目相同的路径filepath = new String(filepath.getBytes("UTF-8"));File _file = new File(filepath);// 将路径转化为文件// System.out.println("_file:"+_file.getAbsolutePath()+" **** entry:"+entry.getName());if (entry.isDirectory()) {// 是文件夹就创建文件目录System.out.println("entry:  " + entry.getName());_file.mkdirs();} else {// System.out.println(_file.getParentFile().toString()+"----"+_file.toString());// 指定文件的目录不存在,则创建(即该文件的父文件夹)if (!_file.getParentFile().exists()) {_file.getParentFile().mkdirs();}// 获得输出流FileOutputStream fos = new FileOutputStream(_file);BufferedOutputStream bos = new BufferedOutputStream(fos);byte[] values = new byte[1024];int end = -1;while ((end = bis.read(values)) != -1) {bos.write(values, 0, end);bos.flush();}bos.close();bis.close();}}System.out.println("解压完成...");}public static void main(String[] args) {try {System.out.println("请选择你的操作:\n1.压缩文件\n2.解压文件");Scanner in = new Scanner(System.in);int operNum = in.nextInt();switch (operNum) {case 1:System.out.println("请输入要压缩的文件:");String dir = in.next();zipmethod(new File(dir), dir + ".zip");// 压缩break;case 2:System.out.println("请输入要解压的文件:");String undir = in.next();// System.out.println(undir.substring(0, undir.indexOf('.')));unZipFile(new File(undir.substring(0, undir.indexOf('.'))),undir);// 解压default:break;}} catch (Exception e) {e.printStackTrace();}}}


原创粉丝点击