mirror of
https://gitee.com/dromara/hutool.git
synced 2025-07-15 14:04:33 +08:00
add FileFilter support
This commit is contained in:
parent
e8964cb708
commit
7ca33d1602
@ -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)
|
||||
|
@ -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);
|
||||
|
@ -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());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 转为实体类对象
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user