1
ant.jar
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
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 java.util.List;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;
/**
* 功能: 1 、实现把指定文件夹下的所有文件压缩为指定文件夹下指定 zip 文件 2 、实现把指定文件夹下的 zip 文件解压到指定目录下
*/
public class ZipUtils {
public static void unZip(String dic) {
// 从本地目录获取已经转移到的压缩文件
List<File> fileList = FileUtil.getMoveFiles(dic);
// 遍历文件
for (File file : fileList) {
String tempFile = file.getName();
// 解压压缩文件
ZipUtils.unZip(dic + tempFile, dic);
// 删除压缩文件
FileUtil.delFiles(new File(dic + tempFile));
}
}
/**
* 功能:把 所有文件进行 zip 格式的压缩,保存为指定 zip 文件
*
* @param sourceDir
* @param zipFile
*/
public static void zip(List<File> flist, String tmpFile) throws Exception {
OutputStream os1;// 工作空间
try {
os1 = new FileOutputStream(tmpFile);
BufferedOutputStream bos1 = new BufferedOutputStream(os1);
ZipOutputStream zos1 = new ZipOutputStream(bos1);
zipFile(flist, zos1);
zos1.closeEntry();
zos1.close();
} catch (Exception e) {
throw e;
}
}
// 读取本地文件函数
public static byte[] readToString(File file) throws Exception {
// 获取文件长度
Long filelength = file.length();
// 创建相应的数组
byte[] filecontent = new byte[filelength.intValue()];
// 创建流
FileInputStream in = new FileInputStream(file);
try {
// 读取文件
in.read(filecontent);
} finally {
in.close();
}
// 返回文件内容
return filecontent;
}
/**
* 功能:执行文件压缩成zip文件
*/
private static void zipFile(List<File> flist, ZipOutputStream zos)
throws Exception {
for (File file : flist) {
String pathName = file.getName();
zos.putNextEntry(new ZipEntry(pathName));
zos.write(readToString(file));
}
}
/**
* 功能:解压 zip 文件,只能解压 zip 文件
*
* @param zipfile
* @param destDir
*/
@SuppressWarnings("rawtypes")
public static void unZip(String zipfile, String destDir) {
destDir = destDir.endsWith("\\") ? destDir : destDir + "\\";
byte b[] = new byte[1024];
int length;
ZipFile zipFile;
try {
zipFile = new ZipFile(new File(zipfile));
Enumeration enumeration = zipFile.getEntries();
ZipEntry zipEntry = null;
while (enumeration.hasMoreElements()) {
zipEntry = (ZipEntry) enumeration.nextElement();
File loadFile = new File(destDir + zipEntry.getName());
if (zipEntry.isDirectory()) {
loadFile.mkdirs();
} else {
if (!loadFile.getParentFile().exists()) {
loadFile.getParentFile().mkdirs();
}
OutputStream outputStream = new FileOutputStream(loadFile);
InputStream inputStream = zipFile.getInputStream(zipEntry);
while ((length = inputStream.read(b)) > 0)
outputStream.write(b, 0, length);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 根据路径删除指定的目录或文件,无论存在与否
*
* @param sPath
* 要删除的目录或文件
* @return 删除成功返回 true,否则返回 false。
*/
public static boolean deleteFolder(String sPath) {
Boolean flag = false;
File file = new File(sPath);
// 判断目录或文件是否存在
if (!file.exists()) { // 不存在返回 false
return flag;
} else {
// 判断是否为文件
if (file.isFile()) { // 为文件时调用删除文件方法
return deleteFile(sPath);
} else { // 为目录时调用删除目录方法
return deleteDirectory(sPath);
}
}
}
/**
* 删除单个文件
*
* @param sPath
* 被删除文件的文件名
* @return 单个文件删除成功返回true,否则返回false
*/
public static boolean deleteFile(String sPath) {
Boolean flag = false;
File file = new File(sPath);
// 路径为文件且不为空则进行删除
if (file.isFile() && file.exists()) {
file.delete();
flag = true;
}
return flag;
}
/**
* 删除目录(文件夹)以及目录下的文件
*
* @param sPath
* 被删除目录的文件路径
* @return 目录删除成功返回true,否则返回false
*/
public static boolean deleteDirectory(String sPath) {
// 如果sPath不以文件分隔符结尾,自动添加文件分隔符
if (!sPath.endsWith(File.separator)) {
sPath = sPath + File.separator;
}
File dirFile = new File(sPath);
// 如果dir对应的文件不存在,或者不是一个目录,则退出
if (!dirFile.exists() || !dirFile.isDirectory()) {
return false;
}
Boolean flag = true;
// 删除文件夹下的所有文件(包括子目录)
File[] files = dirFile.listFiles();
for (int i = 0; i < files.length; i++) {
// 删除子文件
if (files[i].isFile()) {
flag = deleteFile(files[i].getAbsolutePath());
} // 删除子目录
else {
flag = deleteDirectory(files[i].getAbsolutePath());
}
}
if (!flag)
return false;
// 删除当前目录
if (dirFile.delete()) {
return true;
} else {
return false;
}
}
/**
* @Description
* @param source
* @param target
* @throws IOException
*/
public static void customBufferBufferedStreamCopy(File source, File target)
throws IOException {
InputStream fis = null;
OutputStream fos = null;
try {
fis = new BufferedInputStream(new FileInputStream(source));
fos = new BufferedOutputStream(new FileOutputStream(target));
byte[] buf = new byte[4096];
int i;
while ((i = fis.read(buf)) != -1) {
fos.write(buf, 0, i);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
fis.close();
fos.close();
}
}
2
3