add FileFilter support

This commit is contained in:
Looly 2019-09-09 15:20:42 +08:00
parent e8964cb708
commit 7ca33d1602
3 changed files with 25 additions and 6 deletions

View File

@ -14,6 +14,7 @@
* 【extra】 添加MyNLP支持issue#519@Github
* 【json】 添加自定义序列化反序列化支持issue#I1052A@Gitee
* 【dfa】 优化特殊字符构建优化查找改为使用StrBuilder
* 【core】 ZipUtil增加FileFilter参数的重载支持文件过滤issue#I11RTP@Gitee
### Bug修复
* 【core】 修复NetUtil.getUsableLocalPort问题pr#69@Gitee

View File

@ -4,6 +4,7 @@ import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@ -143,7 +144,7 @@ public class ZipUtil {
public static File zip(File zipFile, boolean withSrcDir, File... srcFiles) throws UtilException {
return zip(zipFile, DEFAULT_CHARSET, withSrcDir, srcFiles);
}
/**
* 对文件或文件目录进行压缩
*
@ -155,6 +156,22 @@ public class ZipUtil {
* @throws UtilException IO异常
*/
public static File zip(File zipFile, Charset charset, boolean withSrcDir, File... srcFiles) throws UtilException {
return zip(zipFile, charset, withSrcDir, null, srcFiles);
}
/**
* 对文件或文件目录进行压缩
*
* @param zipFile 生成的Zip文件包括文件名注意zipPath不能是srcPath路径下的子文件夹
* @param charset 编码
* @param withSrcDir 是否包含被打包目录只针对压缩目录有效若为false则只压缩目录下的文件或目录为true则将本目录也压缩
* @param filter 文件过滤器通过实现此接口自定义要过滤的文件过滤掉哪些文件或文件夹不加入压缩
* @param srcFiles 要压缩的源文件或目录如果压缩一个文件则为该文件的全路径如果压缩一个目录则为该目录的顶层目录路径
* @return 压缩文件
* @throws UtilException IO异常
* @since 4.6.5
*/
public static File zip(File zipFile, Charset charset, boolean withSrcDir, FileFilter filter, File... srcFiles) throws UtilException {
validateFiles(zipFile, srcFiles);
try (ZipOutputStream out = getZipOutputStream(zipFile, charset)) {
@ -170,7 +187,7 @@ public class ZipUtil {
srcRootDir = srcFile.getCanonicalFile().getParentFile().getCanonicalPath();
}
// 调用递归压缩方法进行目录或文件压缩
zip(srcFile, srcRootDir, out);
zip(srcFile, srcRootDir, out, filter);
out.flush();
}
} catch (IOException e) {
@ -833,10 +850,11 @@ public class ZipUtil {
* @param out 压缩文件存储对象
* @param srcRootDir 被压缩的文件夹根目录
* @param file 当前递归压缩的文件或目录对象
* @param filter 文件过滤器通过实现此接口自定义要过滤的文件过滤掉哪些文件或文件夹不加入压缩
* @throws UtilException IO异常
*/
private static void zip(File file, String srcRootDir, ZipOutputStream out) throws UtilException {
if (file == null) {
private static void zip(File file, String srcRootDir, ZipOutputStream out, FileFilter filter) throws UtilException {
if(null == file || (null != filter && false == filter.accept(file))) {
return;
}
@ -849,7 +867,7 @@ public class ZipUtil {
}
// 压缩目录下的子文件或目录
for (File childFile : files) {
zip(childFile, srcRootDir, out);
zip(childFile, srcRootDir, out, filter);
}
} else {// 如果是文件或其它符号则直接压缩该文件
addFile(file, subPath, out);

View File

@ -310,7 +310,7 @@ public class JSONObject extends JSONGetter<String> implements JSON, Map<String,
public <T> T toBean(TypeReference<T> reference) {
return toBean(reference.getType());
}
/**
* 转为实体类对象
*