java实现多个文件压缩成压缩包
作者:NFA_YY 发布时间:2022-12-06 17:45:54
标签:java,文件压缩,压缩包
本文实例为大家分享了java实现多个文件压缩的具体代码,供大家参考,具体内容如下
需要用到的ant.jar
package util;
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.io.OutputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
public class ZipTools {
public static final String ZIP_FILENAME = ""; //需要解压缩的文件名
public static final String ZIP_DIR = ""; //需要压缩的文件夹
public static final String UN_ZIP_DIR = ""; //要解压的文件目录
public static final int BUFFER = 1024 ; //缓存大小
public static void zipFile(String baseDir,String fileName) throws Exception{
List fileList=getSubFiles(new File(baseDir));
ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(fileName));
ZipEntry ze=null;
byte[] buf=new byte[BUFFER];
int readLen=0;
for(int i = 0; i <fileList.size(); i++) {
File f=(File)fileList.get(i);
ze=new ZipEntry(getAbsFileName(baseDir, f));
ze.setSize(f.length());
ze.setTime(f.lastModified());
zos.putNextEntry(ze);
InputStream is=new BufferedInputStream(new FileInputStream(f));
while ((readLen=is.read(buf, 0, BUFFER))!=-1) {
zos.write(buf, 0, readLen);
}
is.close();
}
zos.close();
}
private static String getAbsFileName(String baseDir, File realFileName){
File real=realFileName;
File base=new File(baseDir);
String ret=real.getName();
while (true) {
real=real.getParentFile();
if(real==null)
break;
if(real.equals(base))
break;
else
ret=real.getName()+"/"+ret;
}
return ret;
}
private static List getSubFiles(File baseDir){
List ret=new ArrayList();
File[] tmp=baseDir.listFiles();
for (int i = 0; i <tmp.length; i++) {
if(tmp[i].isFile())
ret.add(tmp[i]);
if(tmp[i].isDirectory())
ret.addAll(getSubFiles(tmp[i]));
}
return ret;
}
public static void upZipFile() throws Exception{
ZipFile zfile=new ZipFile(ZIP_FILENAME);
Enumeration zList=zfile.entries();
ZipEntry ze=null;
byte[] buf=new byte[1024];
while(zList.hasMoreElements()){
ze=(ZipEntry)zList.nextElement();
if(ze.isDirectory()){
File f=new File(ZIP_DIR+ze.getName());
f.mkdir();
continue;
}
OutputStream os=new BufferedOutputStream(new FileOutputStream(getRealFileName(ZIP_DIR, ze.getName())));
InputStream is=new BufferedInputStream(zfile.getInputStream(ze));
int readLen=0;
while ((readLen=is.read(buf, 0, 1024))!=-1) {
os.write(buf, 0, readLen);
}
is.close();
os.close();
}
zfile.close();
}
public static File getRealFileName(String baseDir, String absFileName){
String[] dirs=absFileName.split("/");
File ret=new File(baseDir);
if(dirs.length>1){
for (int i = 0; i < dirs.length-1;i++) {
ret=new File(ret, dirs[i]);
}
if(!ret.exists())
ret.mkdirs();
ret=new File(ret, dirs[dirs.length-1]);
return ret;
}
return ret;
}
public static void deleteDirFile(String path){
File file=new File(path);
if(file.isDirectory()){ //如果是目录,先递归删除
String[] list=file.list();
for(int i=0;i<list.length;i++){
deleteDirFile(path+"\\"+list[i]); //先删除目录下的文件
}
}
file.delete();
}
public static String newFolder(String dir){
java.io.File myFilePath=new java.io.File(dir);
if(myFilePath.isDirectory()){}else{
myFilePath.mkdirs();
}
return dir;
}
public static String getFileNames(String path){
File file = new File(path); // get file list where the path has
File[] array = file.listFiles(); // 获得文件列表
String pdfNames="";
for(int i=0;i<array.length;i++){
if(array[i].isFile()){
if(array[i].getName().endsWith(".pdf")){ //获得pdf文件名称
pdfNames+=array[i].getName().substring(0,array[i].getName().length()-4)+",";
}
}
}
if(pdfNames.length()>0){
pdfNames.substring(0,pdfNames.length()-1);
}
return pdfNames;
}
public static void copyFile(String oldPath, String newPath) {
try {
int bytesum = 0;
int byteread = 0;
File oldfile = new File(oldPath);
if (oldfile.exists()) { //文件存在时
InputStream inStream = new FileInputStream(oldPath); //读入原文件
FileOutputStream fs = new FileOutputStream(newPath);
byte[] buffer = new byte[1444];
while ( (byteread = inStream.read(buffer)) != -1) {
bytesum += byteread; //字节数文件大小
fs.write(buffer, 0, byteread);
}
inStream.close();
}
}
catch (Exception e) {
System.out.println("copy file error!");
e.printStackTrace();
}
}
public static boolean fileExist(String fileNames,String pdfName){
boolean flag=false;
if(!"".equals(fileNames)){
String[] nameArr=fileNames.split(",");
for(int i=0;i<nameArr.length;i++){
if(pdfName.equals(nameArr[i])){ //如果文件名相同则执行拷贝操作(拷贝到zip目录准备打包)
flag=true;
break;
}
}
}
return flag;
}
public static void deleteFileAndDir(String path){
File file = new File(path);
File[] array = file.listFiles();
for(int i=0;i<array.length;i++){
if(array[i].isFile()){
array[i].delete();
}else if(array[i].isDirectory()){
deleteDirFile(array[i].getPath());
}
}
}
}
来源:https://blog.csdn.net/NFA_YY/article/details/73613406


猜你喜欢
- 本文实例讲述了Android下2d物理引擎Box2d用法。分享给大家供大家参考。具体如下:程序运行的时候需要加载Jbox2d的库,可到以下地
- 使用wpf程序常常会出现一个问题,那就是内存占用过高,使用wpf的程序功能越复杂往往用着用着内存就本着90往上去了。一方面wpf本身是一个u
- 废话少说,直接上代码:ehcache.xml 文件<?xml version="1.0" encoding=&qu
- 初看 cgaolei 翻译的 Java技巧之双括弧初始化 一文,走马观花,只知用法,未细看后面的解释。蔚为惊艳,心里想 Java 竟然有这么
- 一个打砖块游戏算法,供大家参考,具体内容如下这里有一个打砖块游戏:小明面前有很多砖块,每个砖块上有一个字符,小明每击中一个砖块,会产生一个分
- 究其根本,原因在于,能在unity面板上识别的变量,public不是唯一的条件,另外一个条件是可序列化比如你声明了如下一个类using Sy
- 本文实例为大家分享了java使用influxDB数据库的具体代码,供大家参考,具体内容如下1.pom.xml中导入jar包依赖<!--
- 本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等。 在下面的描述中,将以&
- 如果您通过以下的代码来获取定义的颜色值context.getResources().getColor(R.color.some_color_
- 摘要:最近在做任务管理,任务可以无限派生子任务且没有数量限制,前端采用Easyui的Treegrid树形展示控件。一、遇到的问题获取全部任务
- Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序。这些服务可以在计
- 需求分析需求一:图片列表查询,从后台返回数据,将数据展示在页面上需求二:新增图片,将新增图书的数据传递到后台,并在控制台打印说明:此次案例的
- 介绍前面一章说了AbstractApplicationContext中的refresh方法中的invokeBeanFactoryPostPr
- 下面的示例提供对某个已存档类型的基本概述。示例// If compiling from the command line, compile
- 一. 线程池简介1. 线程池的概念:线程池就是首先创建一些线程,它们的集合称为线程池。使用线程池可以很好地提高性能,线程池在系统启动时即创建
- 前言在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似ke
- 甲:听说最近java跌落神坛,python称霸武林了,你知道吗?乙:不是吧,我前几天看python怎么还是第三?丙:你们都在扯蛋,pytho
- 1. 基本用法<dependency> <groupId>org.redisson</groupI
- 本文实例为大家分享了Unity Shader实现描边OutLine效果的具体代码,供大家参考,具体内容如下Shader实现描边流程大致为:对
- 重载:方法名相同,但参数不同的多个同名函数注意:1.参数不同的意思是参数类型、参数个数、参数顺序至少有一个不同2.返回值和异常以及访问修饰符