From 4b7da5119b32f173c96e575bad130ba2a8ade6b7 Mon Sep 17 00:00:00 2001 From: likeguo Date: Wed, 22 Mar 2023 23:30:03 +0800 Subject: [PATCH] add filter read line --- .../main/java/cn/hutool/core/io/FileUtil.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/hutool-core/src/main/java/cn/hutool/core/io/FileUtil.java b/hutool-core/src/main/java/cn/hutool/core/io/FileUtil.java index 4c838288d..d28db5099 100644 --- a/hutool-core/src/main/java/cn/hutool/core/io/FileUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/FileUtil.java @@ -13,6 +13,7 @@ import cn.hutool.core.io.file.Tailer; import cn.hutool.core.io.resource.ResourceUtil; import cn.hutool.core.io.unit.DataSizeUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.lang.Filter; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.CharUtil; import cn.hutool.core.util.CharsetUtil; @@ -49,6 +50,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; import java.util.function.Consumer; +import java.util.function.Predicate; import java.util.jar.JarFile; import java.util.zip.CRC32; import java.util.zip.Checksum; @@ -2222,6 +2224,19 @@ public class FileUtil extends PathUtil { return readLines(file, CharsetUtil.CHARSET_UTF_8); } + /** + * 从文件中读取每一行数据 + * + * @param file 文件 + * @param filter 过滤器 + * @return 文件中的每行内容的集合List + * @throws IORuntimeException IO异常 + * @since 3.1.1 + */ + public static List readUtf8Lines(File file, Predicate filter) throws IORuntimeException { + return readLines(file, CharsetUtil.CHARSET_UTF_8, filter); + } + /** * 从文件中读取每一行数据 * @@ -2246,6 +2261,25 @@ public class FileUtil extends PathUtil { return readLines(file, charset, new ArrayList<>()); } + /** + * 从文件中读取每一行数据 + * + * @param file 文件 + * @param charset 字符集 + * @param filter 过滤器 + * @return 文件中的每行内容的集合List + * @throws IORuntimeException IO异常 + */ + public static List readLines(File file, Charset charset, Predicate filter) throws IORuntimeException { + final List result = new ArrayList<>(); + readLines(file, charset, (LineHandler) line -> { + if (Boolean.TRUE.equals(filter.test(line))) { + result.add(line); + } + }); + return result; + } + /** * 按行处理文件内容,编码为UTF-8 *