java中对文件解压和压缩的实现
来源:互联网 发布:当前世界危机知乎 编辑:程序博客网 时间:2024/04/30 01:15
今天早上写的,里面需要用到ant,jar这个包,需要的可以自己下。O(∩_∩)O哈哈~
ZipUtil.java
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以处理中文乱码) * */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); // 创建本zip文件解压目录 String name = file.getName().substring(0, file.getName().lastIndexOf(".")); File unzipFile = new File(unzipDirectory + "/" + name); if (unzipFile.exists()) unzipFile.delete(); unzipFile.mkdir(); // 得到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(); } } } /** * 测试 * * @param args * @throws Exception */ public static void main(String[] args) throws Exception { unzip("d:/桌面.zip", "f:/"); System.out.println("over...................."); zip(new File("C:/a"), new File("d:/桌面.zip")); System.out.println("over.............."); }}
FileUtil.java
import java.io.File;import java.io.FileNotFoundException;public class FileUtil { /** * 创建文件夹,如果文件夹存在则不进行创建。 * @param path * @throws Exception */ public static void createDirectory(String path) throws Exception{ path = separatorReplace(path); File folder = new File(path); if(folder.isDirectory()){ return; }else if(folder.isFile()){ deleteFile(path); } folder.mkdirs(); } /** * 分隔符替换 * window下测试通过 * @param path * @return */ public static String separatorReplace(String path){ return path.replace("\\","/"); } /** * 根据文件路径删除文件,如果路径指向的文件不存在或删除失败则抛出异常。 * @param path * @return * @throws Exception */ public static void deleteFile(String path) throws Exception { path = separatorReplace(path); File file = getFile(path); if(!file.delete()){ throw new Exception("delete file failure"); } } /** * 通过路径获得文件, * 若不存在则抛异常, * 若存在则返回该文件。 * @param path * @return * @throws FileNotFoundException */public static File getFile(String path) throws FileNotFoundException{path = separatorReplace(path);File file = new File(path);if(!file.isFile()){throw new FileNotFoundException("file not found!");}return file;}}
- java中对文件解压和压缩的实现
- java程序实现对文件的压缩和解压
- java实现的文件压缩和解压
- java中对文件压缩与解压
- java对文件压缩和解压
- 对文件的压缩和解压
- Java实现Zip文件的解压和压缩_ZipUtil
- java对jar的解压和压缩
- java 中压缩和解压文件的方法
- JAVA自己实现的文件压缩解压
- Java实现文件的压缩与解压
- Java实现文件的压缩与解压
- Java实现文件的压缩与解压
- Java文件的压缩和解压操作
- Java实现Gzip的压缩和解压
- java实现zip的压缩和解压
- 如何在java中实现对zip和rar文件的解压
- java压缩和解压文件
- IOS7开发~解决UIImagePickerController出现时候显示StatusBar
- 10 个你值得拥有的 Vim 配色方案
- 南阳ACM22-素数求和问题
- Objective-C入门基础
- gitlab 修改web端口探索
- java中对文件解压和压缩的实现
- 广州最好的网页平面UI设计培训 UI设计师的摇篮
- spring的jar包下载地址
- web.xml配置taglib标签出错
- RedHatEnterpriseLinux6.4 yum源制作(163镜像源)
- 矢量图像可以快速Corel Draw或Adobe工作室使用
- 给eclipse添加字体,适合给新手看。
- linux 系统使用/管理之-----Linux常用命令详解
- 程序员的每一天