public class ZipFileUtil {
private static final String ZIP_FORMAT = "zip";
private static final String SYMBOL_POINT = ".";
private static final String SYMBOL_SLASH = "/";
/**
* 压缩文件
*
* @param zipFileName 保存的压缩包文件路径
* @param inputFile 需要压缩的文件夹或者文件路径
* @return isSuccess
*/
public static boolean zipFiles(String[] inputFiles,String zipFileName){
boolean isSuccess = false;
//文件名检测
if (inputFiles == null || !isZipFile(zipFileName)) {
return false;
}
ZipOutputStream zoStream = null;
FileInputStream fiStream = null;
FileOutputStream foStream = null;
try {
foStream = new FileOutputStream(zipFileName);
zoStream = new ZipOutputStream(foStream);
for (int i = 0; i < inputFiles.length; i++) {
fiStream = new FileInputStream(inputFiles[i]);
ZipEntry zipEntry = new ZipEntry(getFileName(inputFiles[i]));
zoStream.putNextEntry(zipEntry);
StreamUtil.io(fiStream, zoStream);
fiStream.close();
}
zoStream.closeEntry();
isSuccess = true;
} catch (FileNotFoundException e) {
//log
return false;
} catch (IOException e) {
//log
return false;
} finally {
if (fiStream != null) {
try {
fiStream.close();
} catch (IOException e) {
//log
}
}
if (zoStream != null) {
try {
zoStream.close();
} catch (IOException e) {
//log
}
}
if (foStream != null) {
try {
foStream.close();
} catch (IOException e) {
//log
}
}
}
return isSuccess;
}
/**
* 判断指定文件是否是zip文件
*
* @param filePath
* @return
*/
private static boolean isZipFile(String filePath) {
if (StringUtil.isBlank(filePath)) {
return false;
}
String fileExtension = StringUtil.substringAfterLast(filePath, SYMBOL_POINT);
return ZIP_FORMAT.equalsIgnoreCase(fileExtension);
}
/**
* 截取文件名
*
* @param pathName
* @return
*/
private static String getFileName(String filePath) {
if (StringUtil.isBlank(filePath)) {
return null;
}
boolean isFile = StringUtil.contains(filePath, SYMBOL_SLASH);
if (isFile) {
return StringUtil.substringAfterLast(filePath, SYMBOL_SLASH);
} else {
return filePath;
}
}
/**
* 解压ZIP文件 ZIP文件 --> files
*
* @param destZipFile 压缩文件的完整路径名
* @param unzipDir 解压后文件存储所在的目录
* @return List<String> 存储了解压后文件路径名的列表,如果解压失败那么其size为0
*/
public static List<String> unzipFiles(String unzipDir, String destZipFile) {
List<String> resultFileList = new ArrayList<String>();
if (!isZipFile(destZipFile)) {
return resultFileList;
}
String unzipSubDir = getUnZipSubDir(unzipDir);
try {
FileInputStream in = new FileInputStream(destZipFile);
unzipStreamToFiles(in, unzipSubDir, resultFileList);
} catch (FileNotFoundException e) {
//log
return resultFileList;
}
return resultFileList;
}
private static String getUnZipSubDir(String unzipDir) {
File fileDir = new File(unzipDir);
int fileNum = fileDir.list().length;
int subDirNum = 0;
String subDir = null;
for(int i=0;i<fileNum;i++){
if(fileDir.listFiles()[i].isDirectory()){
subDirNum++;
}
}
subDir = Integer.toString(subDirNum+1);
if(subDirNum<10){
subDir = "0"+subDir;
}
unzipDir = unzipDir+File.separator+subDir+File.separator;
fileDir = new File(unzipDir);
if (!fileDir.exists()) {
new File(unzipDir).mkdir();
}
return unzipDir;
}
/**
* 将zip输入流解压成文件,并将解压后的文件路径放在resultFileList中 注意如果传入的 resultFileList
* 中有元素,那么原有的元素将被清除 如果指定的解压文件存储的目录不存在,那么本方法会自动建立该目录
*
* @param zipedStream 待解压的zip输入流 (NOT NULL)
* @param unzipDir 解压后的文件存储的路径 (NOT NULL)
* @param resultFileList 保存解压完成文件路径名的文件名列表 (NOT NULL)
* @return
*/
public static boolean unzipStreamToFiles(InputStream zipedStream, String unzipDir,
List<String> resultFileList) {
if (zipedStream == null || StringUtil.isBlank(unzipDir) || resultFileList == null) {
return false;
}
File dir = new File(unzipDir);
if (!dir.exists()) {
dir.mkdirs();
}
resultFileList.clear();
ZipInputStream ziStream = null;
FileOutputStream foStream = null;
ziStream = new ZipInputStream(zipedStream);
ZipEntry zipEntry;
try {
zipEntry = ziStream.getNextEntry();
while (zipEntry != null) {
String fileName = getFileName(zipEntry.getName());
String destFile = unzipDir + fileName;
foStream = new FileOutputStream(destFile);
StreamUtil.io(ziStream, foStream);
foStream.close();
ziStream.closeEntry();
zipEntry = ziStream.getNextEntry();
resultFileList.add(destFile);
}
} catch (IOException e) {
//log
} finally {
if (foStream != null) {
try {
foStream.close();
} catch (IOException e) {
//log
}
}
if (ziStream != null) {
try {
ziStream.close();
} catch (IOException e) {
//log
}
}
}
return true;
}
}
分享到:
相关推荐
JAVA文件压缩与解压缩实践(源代码+论文)
JAVA文件压缩与解压缩实践报告 主函数 gzip压缩模块代码 压缩模块要完成的就是将文件读入以后进行压缩,再将压缩后的数据写入一个新的文件,其部分代码如下: public class gzip { public static void main(String...
JAVA文件压缩与解压缩实践(源代码+论文) JAVA文件压缩与解压缩实践(源代码+论文) JAVA文件压缩与解压缩实践(源代码+论文) JAVA文件压缩与解压缩实践(源代码+论文) JAVA文件压缩与解压缩实践(源代码+论文) JAVA文件...
JAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩...
JAVA文件压缩与解压缩实践(源代码+LW)JAVA文件压缩与解压缩实践(源代码+LW)JAVA文件压缩与解压缩实践(源代码+LW)JAVA文件压缩与解压缩实践(源代码+LW)JAVA文件压缩与解压缩实践(源代码+LW)JAVA文件压缩与解压缩实践...
JAVA文件压缩与解压缩实践(源代码+论文)JAVA文件压缩与解压缩实践(源代码+论文)JAVA文件压缩与解压缩实践(源代码+论文)JAVA文件压缩与解压缩实践(源代码+论文)JAVA文件压缩与解压缩实践(源代码+论文)JAVA文件压缩与...
JAVA文件压缩与解压缩实践(源代码+lw).rarJAVA文件压缩与解压缩实践(源代码+lw).rarJAVA文件压缩与解压缩实践(源代码+lw).rarJAVA文件压缩与解...实践(源代码+lw).rarJAVA文件压缩与解压缩实践(源代码+lw).rarJAVA文件
(Java毕业设计)JAVA文件压缩与解压缩实践(Java毕业设计)JAVA文件压缩与解压缩实践(Java毕业设计)JAVA文件压缩与解压缩实践(Java毕业设计)JAVA文件压缩与解压缩实践(Java毕业设计)JAVA文件压缩与解压缩实践(Java毕业...
适合练手、课程设计、毕业设计的Java项目源码:文件压缩与解压缩实践(源代码+论文).rar 适合练手、课程设计、毕业设计的Java项目源码:文件压缩与解压缩实践(源代码+论文).rar 适合练手、课程设计、毕业设计的Java...
java毕业设计——java文件压缩与解压缩实践设计与开发(源代码+论文).zip java毕业设计——java文件压缩与解压缩实践设计与开发(源代码+论文).zip java毕业设计——java文件压缩与解压缩实践设计与开发(源代码+论文)....
javaweb毕业设计-JAVA文件压缩与解压缩实践(源代码+lw)(可做课程设计).rarjavaweb毕业设计-JAVA文件压缩与解压缩实践(源代码+lw)(可做课程设计).rarjavaweb毕业设计-JAVA文件压缩与解压缩实践(源代码+lw)(可做课程...
如果服务器上安装了RAR程序,那么asp.net可以调用RAR实现文件压缩与解压缩。 不过要注意的是,由于Web程序不能直接调用客户端的程序(除非用ActiveX,ActiveX几乎被废弃),所以如果要想实现让用户把本地文件用网页...
Java文件压缩与解压缩实践是指利用Java编程语言实现对文件或文件夹进行压缩和解压缩操作。以下是该实践的描述: 技术概述: Java文件压缩与解压缩是指将一个或多个文件或文件夹打包成一个压缩文件,或者将压缩文件...
数据结构课程设计-基于Huffman编码的文件压缩与解压缩 2.2.1结构设计 typedef struct Node { unsigned char ch;//字符 double weight;//字符的频数 int parent,lchild,rchild; }HTNode,HuffmanTree[2*N-1];//...
本文件包包含了基于Java的文件压缩与解压缩实践的源代码和一篇详尽的论文。这个实践项目旨在利用Java编程语言实现文件的压缩与解压缩功能,为用户提供一个高效、稳定且易于使用的文件处理工具。 源代码部分包含了...
本系统将基于JAVA语言开发,使用JAVA自带的Zip文件压缩与解压缩类库,同时结合JAVA的加密解密类库,实现文件压缩与解压缩以及加密解密的功能。 ## 预期成果 本毕业设计旨在实现一个基于JAVA文件压缩与解压缩系统,...