java压缩解压文件(代码记录)
来源:互联网 发布:golang microservice 编辑:程序博客网 时间:2024/05/17 23:10
package com.train.utils;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.util.Enumeration;import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipFile;import org.apache.tools.zip.ZipOutputStream;/** * @author Feng * * 文件编码解压方式 * */public class MyZipUtils {/** * 根据不同类型编码解压 * @param fileAddress * zip文件路径 * @param unZipAddress * zip文件解压地址 * @throws Exception */public static void unZipFiles(String fileAddress, String unZipAddress)throws Exception {File file = new File(fileAddress);ZipFile zipFile = null;try {zipFile = new ZipFile(file, "UTF-8");} catch (IOException e) {e.printStackTrace();System.out.println("解压文件不存在!");}Enumeration<ZipEntry> e = zipFile.getEntries();while (e.hasMoreElements()) {ZipEntry zipEntry = (ZipEntry) e.nextElement();if (zipEntry.isDirectory()) {// 文件名称String name = zipEntry.getName();name = name.substring(0, name.length() - 1);File f = new File(unZipAddress + name);f.mkdirs();} else {File f = new File(unZipAddress + zipEntry.getName());f.getParentFile().mkdirs();f.createNewFile();InputStream is = zipFile.getInputStream(zipEntry);FileOutputStream fos = new FileOutputStream(f);fos.toString().getBytes("UTF-8");int length = 0;byte[] b = new byte[1024];while ((length = is.read(b, 0, 1024)) != -1) {fos.write(b, 0, length);}//因本身文件写入方式为gbk,web展示出现乱码,故重新读取写入utf-8String name = zipEntry.getName();if(name.substring(name.lastIndexOf(".")+1).equals("html")||name.substring(name.lastIndexOf(".")+1).equals("htm")){InputStreamReader isr = new InputStreamReader(zipFile.getInputStream(zipEntry), "GBK"); StringBuffer sbread = new StringBuffer(); while (isr.ready()) { sbread.append((char) isr.read()); } isr.close(); OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(f),"UTF-8"); out.write(sbread.toString().toCharArray()); out.flush(); out.close();}is.close();fos.close();}}if (zipFile != null) {zipFile.close();}file.delete();}/*** 压缩文件* sourcePath 需要压缩的路径* zipFileName 压缩包名*/public static void ZIP(String sourcePath, String zipFileName)throws IOException {ZipOutputStream zos = new ZipOutputStream(new File(zipFileName));// 设置压缩的时候文件名编码为gb2312zos.setEncoding("gb2312");File file = new File(sourcePath);if (file.isDirectory()) {// 此处使用/来表示目录,如果使用\\来表示目录的话,有可能导致压缩后的文件目录组织形式在解压缩的时候不能正确识别。ZIPDIR(sourcePath, zos, file.getName() + "/");} else {// 如果直接压缩文件ZIPDIR(file.getPath(), zos, new File(file.getParent()).getName()+ "/");ZIPFile(file.getPath(), zos, new File(file.getParent()).getName()+ "/" + file.getName());}zos.closeEntry();zos.close();}public static void ZIPDIR(String sourceDir, ZipOutputStream zos,String tager) throws IOException {// System.out.println(tager);ZipEntry ze = new ZipEntry(tager);zos.putNextEntry(ze);// 提取要压缩的文件夹中的所有文件File f = new File(sourceDir);File[] flist = f.listFiles();if (flist != null) {// 如果该文件夹下有文件则提取所有的文件进行压缩for (File fsub : flist) {if (fsub.isDirectory()) {// 如果是目录则进行目录压缩ZIPDIR(fsub.getPath(), zos, tager + fsub.getName() + "/");} else {// 如果是文件,则进行文件压缩ZIPFile(fsub.getPath(), zos, tager + fsub.getName());}}}}public static void ZIPFile(String sourceFileName, ZipOutputStream zos,String tager) throws IOException {// System.out.println(tager);ZipEntry ze = new ZipEntry(tager);zos.putNextEntry(ze);// 读取要压缩文件并将其添加到压缩文件中FileInputStream fis = new FileInputStream(new File(sourceFileName));byte[] bf = new byte[2048];int location = 0;while ((location = fis.read(bf)) != -1) {zos.write(bf, 0, location);}fis.close();}/** * 解压zip * sourceFileName 压缩包路径 * desDir 解压的路径 */public static void UnZIP(String sourceFileName, String desDir)throws IOException {File file = new File(sourceFileName);// 创建压缩文件对象ZipFile zf = new ZipFile(file, "GBK");// 获取压缩文件中的文件枚举Enumeration<ZipEntry> en = zf.getEntries();int length = 0;byte[] b = new byte[1024];// 提取压缩文件夹中的所有压缩实例对象while (en.hasMoreElements()) {ZipEntry ze = (ZipEntry) en.nextElement();// System.out.println("压缩文件夹中的内容:"+ze.getName());// System.out.println("是否是文件夹:"+ze.isDirectory());// 创建解压缩后的文件实例对象File f = new File(desDir + ze.getName());// System.out.println("解压后的内容:"+f.getPath());// System.out.println("是否是文件夹:"+f.isDirectory());// 如果当前压缩文件中的实例对象是文件夹就在解压缩后的文件夹中创建该文件夹if (f.isDirectory()) {f.mkdirs();} else {// 如果当前解压缩文件的父级文件夹没有创建的话,则创建好父级文件夹if (!f.getParentFile().exists()) {f.getParentFile().mkdirs();}// 将当前文件的内容写入解压后的文件夹中。FileOutputStream outputStream = new FileOutputStream(f);InputStream inputStream = zf.getInputStream(ze);while ((length = inputStream.read(b)) > 0) {outputStream.write(b, 0, length);}inputStream.close();outputStream.close();}}zf.close();file.delete();}}
阅读全文
1 0
- java压缩解压文件(代码记录)
- JAVA 压缩解压文件
- JAVA文件压缩、解压
- 压缩解压文件--Java
- java压缩,解压文件
- java实现Zip文件压缩和解压工程代码
- 用java代码实现文件的zip压缩与解压
- 实现Java代码压缩解压
- java 压缩、解压文件、文件夹。
- java压缩与解压文件
- Java文件解压与压缩
- Java压缩解压文件/文件夹
- JAVA压缩及解压文件
- java压缩和解压文件
- java文件压缩与解压
- java 解压,压缩单个文件
- java压缩解压ZIP文件
- 用java压缩/解压文件
- BZOJ4878: [Lydsy2017年5月月赛]挑战NP-Hard
- C#学习笔记(三)—–C#高级特性:匿名方法
- 8 Tactics to Combat Imbalanced Classes in Your Machine Learning Dataset
- 商业模式有哪些?
- 网页设计与制作(HTML+CSS)(二)
- java压缩解压文件(代码记录)
- 高性能mysql笔记(七)高性能的索引策略
- 杭电OJ--1.2.3--Climbing Worm
- 2.工厂方法模式
- Android中getResources().getDrawable() 过时的解决方法
- 3.抽象工厂模式
- BZOJ 4894(天赋-有向图生成树计数)
- Linux进程环境之进程虚拟空间及存储
- 批量恢复 Mac OS X 废纸篓里的文件