结合我前面发表一篇文件过滤器,在指定目录下搜索符合条件的文件后,再进行zip格式压缩文件.这个不支持中文,用java.util.zip包下类来压缩在被压缩的文件名有中文乱码的问题,可以使用apache的ant.jar包里的zip压缩类来进行压缩处理,请参考http://www.blogjava.net/mrcmd/archive/2007/08/24/138963.html
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* @author seany
* 类说明:在指定目录下搜索符合条件的文件后,再进行zip格式压缩文件
*/
public class ZipFileCreator {
/** 文件目录 */
private String directoryName;
public ZipFileCreator(String directoryName) {
this.directoryName = directoryName;
}
/**
*
* @param fileList
* 文件集合
* @param zipFileName
* 压缩后的zip文件名
* @return 是否压缩成功
* @throws Exception
*/
public boolean getZipFile(List<String> fileList, String zipFileName)
throws Exception {
boolean flag = false;
BufferedReader in = null;
FileOutputStream fos = null;
ZipOutputStream zos = null;
ZipEntry entry = null;
File file = null;
// zip文件全路径名
String zipFullName = directoryName + File.separator + zipFileName
+ ".zip";
try {
// zip文件中的名字
String fileName = null;
fos = new FileOutputStream(zipFullName);
file = new File(zipFullName);
zos = new ZipOutputStream(fos);
int len = 0;
for (String fileFullName : fileList) {
in = new BufferedReader(new InputStreamReader(
new FileInputStream(fileFullName), "iso8859-1"));
fileName = new File(fileFullName).getName();
// 压缩到zip文件中
entry = new ZipEntry(fileName);
zos.putNextEntry(entry);
while ((len = in.read()) != -1) {
zos.write(len);
}
zos.closeEntry();
in.close();
}
flag = true;
} catch (Exception e) {
e.printStackTrace();
if ( file.exists()){
file.delete();
}
} finally {
if (null != zos) {
zos.close();
zos = null;
}
if (null != fos) {
fos.close();
fos = null;
}
flag = true;
}
return flag;
}
/**
* 根据指定的目录获取符合条件的文件集合
*
* @param extName
* 文件扩展名,若为多个用逗号隔开:[xls,zip],若为null,就获得该目录下所有文件
* @param partFileStr
* 该文件包含的字符串,为null则是所有符合extName的文件
* @return List 符合条件的文件集合
*/
public List<String> readDirectoryFile(String extName, String partFileStr) {
List<String> fileList = null;
File file = new File(directoryName);
if (file.exists() && file.isDirectory()) {
fileList = new ArrayList<String>();
File files[] = null;
if ( null != extName && !"".equals(extName)){
FilenameFilter filter = new OnlyExtendName(extName);
files = file.listFiles(filter);
} else {
files = file.listFiles();
}
for (File f : files) {
if (!f.isHidden() && f.canRead()) {
String path = f.getPath();
if (null != partFileStr && !"".equals(partFileStr)) {
if (path.indexOf(partFileStr,
directoryName.length() + 1) != -1) {
fileList.add(path);
}
} else {
fileList.add(path);
}
}
}
}
return fileList;
}
/**
* 由文件名数组在当前目录下搜索这些文件的完全路径名,并返回集合
*
* @param fileNames
* @return
*/
public List<String> getFileFullPathByFileName(String fileNames[]) {
List<String> fileList = null;
File file = new File(directoryName);
if (file.exists() && file.isDirectory()) {
fileList = new ArrayList<String>();
String fullPath = null;
File f = null;
for (String fileName : fileNames) {
fullPath = file.getPath() + File.separator + fileName;
f = new File(fullPath);
if (f.exists() && f.isFile()) {
fileList.add(fullPath);
}
}
}
return fileList;
}
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
ZipFileCreator zip = new ZipFileCreator("D:/root");
System.out.println(zip.directoryName);
List<String> fileList = zip.readDirectoryFile("zip,xls", "200908");
for (String file : fileList) {
System.out.println(file);
}
zip.getZipFile(fileList, "2009年08月");
}
}
Apache的ant.jar处理可以参考:
http://topic.csdn.net/u/20090212/21/e5344981-47a6-4f35-afcb-8523bd97d483.html
找jar文件请访问:
http://www.findjar.com/
分享到:
相关推荐
java压缩文件的程序代码,可以压缩单个文件夹,单个标准文件,多个标准文件 多个文件夹,以及文件夹和文件混合的压缩代码
JAVA压缩文件代码 HUFFMAN函数的压缩代码
// 设置压缩文件入口entry,为被读取的文件创建压缩条目 File tempFile = new File(fileArray[i].toString()); String rootStr = file.getPath(); String entryStr = null; // entry以相对路径的...
工具类中提供的方法有:压缩单个文件,压缩多个文件,解压文件到制定路径下。获取压缩文件的文件列表。压缩文件的文件注释。
java压缩文件成zip实现无乱码 内置类与jar包
java压缩文件代码 关于Zip压缩文件
java压缩文件及解压的算法。方法使用见main函数
压缩文件方法 该方法需要引用zip4j的jar文件 单个文件、多个文件压缩 /** * 使用给定密码压缩指定文件或文件夹到指定位置. * * dest可传最终压缩文件存放的绝对路径,也可以传存放目录,也可以传null或者""....
应用java来压缩需要打包的文件,在系统管理中将毛哥路径或者某个文件夹压缩成zip包
解决java压缩zip文件时的中文乱码问题 ...实现:java压缩文件成zip实现无乱码。 包括:写好的工具类与jar包。 使用方法:导入ant.jar包,调用CompressExcelOperate中的方法,即可实现压缩文件,并保证没有中文乱码。
NULL 博文链接:https://ynshun.iteye.com/blog/1917322
2、指定文件夹(文件夹中必须有一个文件),程序会自动的压缩文件为 zip,然后下载删除源文件与压缩文件。 3、可以指定文件都为最后生成为zip文件下载,且删除源文件。 1、压缩文件或者目录(只是压缩不删除):...
java压缩文件时,必须要使用此jar包,之前试过别的很多方式,中文都会乱码
java 写的一个工具类可以用来解压缩zip,rar文件到指定的文件夹下
java代码实现单个或多个文件压缩成rar包,本地要安装winRar插件。