mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-05-09 23:51:34 +08:00
add loopFile
This commit is contained in:
parent
e2c0d13c88
commit
8d449c9fc2
@ -13,6 +13,7 @@
|
|||||||
* 【setting】 Props增加toBean方法(issue#499@Github)
|
* 【setting】 Props增加toBean方法(issue#499@Github)
|
||||||
* 【poi】 CellUtil增加getMergedRegionValue方法,ExcelWriter增加getDisposition方法
|
* 【poi】 CellUtil增加getMergedRegionValue方法,ExcelWriter增加getDisposition方法
|
||||||
* 【http】 HttpBase增加headerMap方法
|
* 【http】 HttpBase增加headerMap方法
|
||||||
|
* 【core】 FileUtil.loopFile增加重载,支持定义深度
|
||||||
|
|
||||||
### Bug修复
|
### Bug修复
|
||||||
* 【http】 修复HttpRquest中body方法长度计算问题(issue#I10UPG@Gitee)
|
* 【http】 修复HttpRquest中body方法长度计算问题(issue#I10UPG@Gitee)
|
||||||
|
@ -21,7 +21,9 @@ import java.net.URLConnection;
|
|||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
import java.nio.file.CopyOption;
|
import java.nio.file.CopyOption;
|
||||||
import java.nio.file.DirectoryStream;
|
import java.nio.file.DirectoryStream;
|
||||||
|
import java.nio.file.FileVisitOption;
|
||||||
import java.nio.file.FileVisitResult;
|
import java.nio.file.FileVisitResult;
|
||||||
|
import java.nio.file.FileVisitor;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.LinkOption;
|
import java.nio.file.LinkOption;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
@ -34,9 +36,11 @@ import java.util.ArrayList;
|
|||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.EnumSet;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.jar.JarEntry;
|
import java.util.jar.JarEntry;
|
||||||
import java.util.jar.JarFile;
|
import java.util.jar.JarFile;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
@ -197,10 +201,8 @@ public class FileUtil {
|
|||||||
* @return 文件列表
|
* @return 文件列表
|
||||||
*/
|
*/
|
||||||
public static List<File> loopFiles(File file, FileFilter fileFilter) {
|
public static List<File> loopFiles(File file, FileFilter fileFilter) {
|
||||||
List<File> fileList = new ArrayList<File>();
|
final List<File> fileList = new ArrayList<File>();
|
||||||
if (null == file) {
|
if (null == file || false == file.exists()) {
|
||||||
return fileList;
|
|
||||||
} else if (false == file.exists()) {
|
|
||||||
return fileList;
|
return fileList;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -220,6 +222,64 @@ public class FileUtil {
|
|||||||
return fileList;
|
return fileList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 递归遍历目录以及子目录中的所有文件<br>
|
||||||
|
* 如果提供file为文件,直接返回过滤结果
|
||||||
|
*
|
||||||
|
* @param file 当前遍历文件或目录
|
||||||
|
* @param maxDepth 遍历最大深度,-1表示遍历到没有目录为止
|
||||||
|
* @param fileFilter 文件过滤规则对象,选择要保留的文件,只对文件有效,不过滤目录,null表示接收全部文件
|
||||||
|
* @return 文件列表
|
||||||
|
* @since 4.6.3
|
||||||
|
*/
|
||||||
|
public static List<File> loopFiles(File file, int maxDepth, final FileFilter fileFilter) {
|
||||||
|
final List<File> fileList = new ArrayList<>();
|
||||||
|
if (null == file || false == file.exists()) {
|
||||||
|
return fileList;
|
||||||
|
} else if (false == file.isDirectory()) {
|
||||||
|
if (null == fileFilter || fileFilter.accept(file)) {
|
||||||
|
fileList.add(file);
|
||||||
|
}
|
||||||
|
return fileList;
|
||||||
|
}
|
||||||
|
|
||||||
|
walkFiles(file.toPath(), maxDepth, new SimpleFileVisitor<Path>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FileVisitResult visitFile(Path path, BasicFileAttributes attrs) throws IOException {
|
||||||
|
final File file = path.toFile();
|
||||||
|
if (null == fileFilter || fileFilter.accept(file)) {
|
||||||
|
fileList.add(file);
|
||||||
|
}
|
||||||
|
return FileVisitResult.CONTINUE;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return fileList;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 遍历指定path下的文件并做处理
|
||||||
|
*
|
||||||
|
* @param start 起始路径,必须为目录
|
||||||
|
* @param maxDepth 最大遍历深度,-1表示不限制深度
|
||||||
|
* @param visitor {@link FileVisitor} 接口,用于自定义在访问文件时,访问目录前后等节点做的操作
|
||||||
|
* @since 4.6.3
|
||||||
|
* @see Files#walkFileTree(Path, Set, int, FileVisitor)
|
||||||
|
*/
|
||||||
|
public static void walkFiles(Path start, int maxDepth, FileVisitor<? super Path> visitor) {
|
||||||
|
if (maxDepth < 0) {
|
||||||
|
// < 0 表示遍历到最底层
|
||||||
|
maxDepth = Integer.MAX_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Files.walkFileTree(start, EnumSet.noneOf(FileVisitOption.class), maxDepth, visitor);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new IORuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 递归遍历目录以及子目录中的所有文件
|
* 递归遍历目录以及子目录中的所有文件
|
||||||
*
|
*
|
||||||
|
@ -232,6 +232,15 @@ public class FileUtilTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Ignore
|
||||||
|
public void loopFilesWithDepthTest() {
|
||||||
|
List<File> files = FileUtil.loopFiles(FileUtil.file("d:/m2_repo"), 2, null);
|
||||||
|
for (File file : files) {
|
||||||
|
Console.log(file.getPath());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getParentTest() {
|
public void getParentTest() {
|
||||||
// 只在Windows下测试
|
// 只在Windows下测试
|
||||||
|
Loading…
x
Reference in New Issue
Block a user