代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
压缩文件的工具类
作者:
雨秋
/ 发布于
2018/4/24
/
683
需要导入jar包:org.apache.ant.jar <dependencies> <dependency> <groupId>org.apache.ant</groupId> <artifactId>ant</artifactId> <version>1.8.1</version> </dependency> </dependencies> Java代码如下 import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class ZipUtil { /** * 防止压缩文件名中文乱码 */ private static final String ZIP_ENCODING = "GBK"; /** * 私有的构造方法 */ private ZipUtil(){} /** * 压缩文件 * @param srcFile 需要压缩的文件 * @param zipFile 压缩后的文件(.zip后缀需要自己添加) * @param overwrite 当文件已存在时是否覆盖 * @throws IOException */ public static void zipFile(File srcFile, File zipFile, boolean overwrite) throws IOException { if (zipFile == null || srcFile == null) { throw new IllegalArgumentException("zipFile和srcFile不能为空!"); } if (!overwrite && zipFile.exists()) { throw new IOException(zipFile.getAbsolutePath() + "文件已存在,参数设定了不能覆盖。"); } if (!zipFile.exists()) { zipFile.createNewFile(); } FileInputStream fileInput = new FileInputStream(srcFile); ZipOutputStream zipOutput = new ZipOutputStream(new FileOutputStream(zipFile)); zipOutput.setEncoding(ZIP_ENCODING); byte[] buffer = new byte[2048]; ZipEntry zipEntry = new ZipEntry(srcFile.getName()); //压缩包里面的文件名 zipOutput.putNextEntry(zipEntry); int len; while ((len = fileInput.read(buffer)) != -1) { zipOutput.write(buffer, 0, len); zipOutput.flush(); } fileInput.close(); zipOutput.close(); } /** * 压缩一个文件。若同名文件存在,则覆盖之。 * @param srcFile 需要压缩的文件 * @param zipFile 压缩生成的文件 * @throws IOException */ public static void zipFile(File srcFile, File zipFile) throws IOException { zipFile(srcFile, zipFile, true); } /** * 与压缩一个文件。生成的文件名为【源文件名.zip】,若有同名文件,则覆盖之。 * @param srcFile 需要压缩的文件 * @throws IOException 压缩生成的文件 */ public static void zipFile(File srcFile) throws IOException { zipFile(srcFile, new File(srcFile.getAbsolutePath() + ".zip"), true); } /** * 压缩一个目录。 * @param srcDir 需要压缩的目录 * @param zipFile 压缩后的文件 * @param overwrite 是否覆盖已存在文件 * @throws IOException */ public static void zipDirectory(File srcDir, File zipFile, boolean overwrite) throws IOException { if (zipFile == null || srcDir == null) { throw new IllegalArgumentException("zipFile和srcDir不能为空!"); } if (!overwrite && zipFile.exists()) { throw new IOException(zipFile.getAbsolutePath() + "文件已存在,参数设定了不能覆盖。"); } if (!zipFile.exists()) { zipFile.createNewFile(); } ZipOutputStream zipOutput = new ZipOutputStream(new FileOutputStream(zipFile)); zipOutput.setEncoding(ZIP_ENCODING); zipDirectory(zipOutput, srcDir, srcDir.getName()); zipOutput.close(); } /** * 压缩目录的辅助方法。递归检查子目录。 * @param zipOutput zip输出流 * @param file 当前文件 * @param base 当前文件在压缩包里的绝对名称 * @throws IOException */ private static void zipDirectory(ZipOutputStream zipOutput, File file, String base) throws IOException { if (file.isDirectory()) { File[] fileList = file.listFiles(); zipOutput.putNextEntry(new ZipEntry(base + "/")); base = (base.length() == 0) ? "" : base + "/"; for (File childFile: fileList) { zipDirectory(zipOutput, childFile, base + childFile.getName()); } } else { zipOutput.putNextEntry(new ZipEntry(base)); FileInputStream fileInputStream = new FileInputStream(file); int length; byte[] buffer = new byte[2048]; while ( (length = fileInputStream.read(buffer)) != -1) { zipOutput.write(buffer, 0, length); zipOutput.flush(); } fileInputStream.close(); } } /** * 压缩一个目录。如果存在同名文件,则会覆盖 * @param srcDir 需要压缩 的目录 * @param zipFile 压缩产生的文件 * @throws IOException */ public static void zipDirectory(File srcDir, File zipFile) throws IOException { zipDirectory(srcDir, zipFile, true); } /** * 压缩一个目录。压缩输出的文件名为(目录名.zip) * @param srcDir 需要压缩的目录 * @throws IOException */ public static void zipDirectory(File srcDir) throws IOException { zipDirectory(srcDir, new File(srcDir.getAbsolutePath()+".zip"), true); } /** * 对一个文件数组进行压缩。数组长度必须大于0 * @param files 文件数组。长度必须大于0 * @param zipFile 压缩后产生的文件 * @param overwrite 如存在同名文件,是否覆盖 * @throws IOException */ public static void zipFiles(File[] files, File zipFile, boolean overwrite) throws IOException { if (zipFile == null || files == null) { throw new IllegalArgumentException("zipFile和srcDir不能为空!"); } if (files.length == 0) { throw new IOException("不能对一个空的文件列表进行压缩"); } if (!overwrite && zipFile.exists()) { throw new IOException(zipFile.getAbsolutePath() + "文件已存在,参数设定了不能覆盖。"); } if (!zipFile.exists()) { zipFile.createNewFile(); } ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(zipFile)); zipOutputStream.setEncoding(ZIP_ENCODING); byte[] buffer = new byte[2048]; int length; for (File file: files) { FileInputStream fileInputStream = new FileInputStream(file); zipOutputStream.putNextEntry(new ZipEntry(file.getName())); while ((length = fileInputStream.read(buffer)) != -1) { zipOutputStream.write(buffer, 0, length); zipOutputStream.flush(); } fileInputStream.close(); } zipOutputStream.close(); } /** * 对一个文件列表进行压缩。列表长度长度必须大于0 * @param fileList 文件列表。长度必须大于0 * @param zipFile 压缩后产生的文件 * @param overwrite 如果已经存在同名文件,是否覆盖。 * @throws IOException */ public static void zipFiles(List<File> fileList, File zipFile, boolean overwrite) throws IOException { zipFiles(fileList.toArray(new File[fileList.size()]), zipFile, overwrite); } /** * 对一个文件列表进行压缩,列表长度长度必须大于0。如存在同名目标文件,则会覆盖它。 * @param fileList 文件列表。长度必须大于0 * @param zipFile 压缩后生成的文件 * @throws IOException */ public static void zipFiles(List<File> fileList, File zipFile) throws IOException { zipFiles(fileList.toArray(new File[fileList.size()]), zipFile, true); } /** * 对一个文件数组进行压缩,数组长度必须大于0。如存在同名目标文件,则会覆盖它。 * @param files 文件数组。长度必须大于0 * @param zipFile 压缩后生成的文件 * @throws IOException */ public static void zipFiles(File[] files, File zipFile) throws IOException { zipFiles(files, zipFile, true); } /** * 测试方法 * @param args 参数 * @throws IOException */ public static void main(String[] args) throws IOException { List<File> fileList = new ArrayList<File>(); fileList.add(new File("D:/1.txt")); fileList.add(new File("D:/2.txt")); // File[] files = {new File("D:/1.txt"), new File("D:/2.txt")}; zipFiles(fileList, new File("D:/test.zip")); zipDirectory(new File("D:/user"), new File("D:/user.zip"), true); } }
试试其它关键字
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
雨秋
贡献的其它代码
(
12
)
.
压缩文件的工具类
.
保存网页上的图片到本地
.
读取json
.
鼠标点击框内自动全选内容、带提示的复制内容
.
对象初始化的详细过程
.
通过IFrame获取其他页面中Div的值
.
一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10
.
文本框textarea高度随内容自适应增长收缩
.
限制textarea每行输入字符串长度
.
实现可拖曳、可关闭的弹窗效果
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3