From 46d10b4dbcc8cf60d9bfde325afcf062cf79ae1f Mon Sep 17 00:00:00 2001 From: Looly Date: Fri, 24 Mar 2023 00:37:40 +0800 Subject: [PATCH] add test --- .../cn/hutool/core/io/file/FileReader.java | 95 +++++-------------- .../cn/hutool/core/io/FileReaderTest.java | 21 +++- .../core/lang/func/LambdaFactoryTest.java | 13 +++ 3 files changed, 57 insertions(+), 72 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/io/file/FileReader.java b/hutool-core/src/main/java/cn/hutool/core/io/file/FileReader.java index 2542e14d3..09150f1aa 100644 --- a/hutool-core/src/main/java/cn/hutool/core/io/file/FileReader.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/file/FileReader.java @@ -8,17 +8,13 @@ import cn.hutool.core.lang.func.SerFunction; import cn.hutool.core.text.StrUtil; import cn.hutool.core.util.CharsetUtil; -import java.io.BufferedInputStream; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.OutputStream; +import java.io.*; import java.nio.charset.Charset; import java.nio.file.Files; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.function.Predicate; /** * 文件读取器 @@ -45,7 +41,7 @@ public class FileReader extends FileWrapper { * @return FileReader */ public static FileReader of(final File file){ - return new FileReader(file); + return new FileReader(FileUtil.file(file), DEFAULT_CHARSET); } // ------------------------------------------------------- Constructor start @@ -58,51 +54,6 @@ public class FileReader extends FileWrapper { super(file, charset); checkFile(); } - - /** - * 构造 - * @param file 文件 - * @param charset 编码,使用 {@link CharsetUtil#charset(String)} - */ - public FileReader(final File file, final String charset) { - this(file, CharsetUtil.charset(charset)); - } - - /** - * 构造 - * @param filePath 文件路径,相对路径会被转换为相对于ClassPath的路径 - * @param charset 编码,使用 {@link CharsetUtil} - */ - public FileReader(final String filePath, final Charset charset) { - this(FileUtil.file(filePath), charset); - } - - /** - * 构造 - * @param filePath 文件路径,相对路径会被转换为相对于ClassPath的路径 - * @param charset 编码,使用 {@link CharsetUtil#charset(String)} - */ - public FileReader(final String filePath, final String charset) { - this(FileUtil.file(filePath), CharsetUtil.charset(charset)); - } - - /** - * 构造
- * 编码使用 {@link FileWrapper#DEFAULT_CHARSET} - * @param file 文件 - */ - public FileReader(final File file) { - this(file, DEFAULT_CHARSET); - } - - /** - * 构造
- * 编码使用 {@link FileWrapper#DEFAULT_CHARSET} - * @param filePath 文件路径,相对路径会被转换为相对于ClassPath的路径 - */ - public FileReader(final String filePath) { - this(filePath, DEFAULT_CHARSET); - } // ------------------------------------------------------- Constructor end /** @@ -113,16 +64,16 @@ public class FileReader extends FileWrapper { * @throws IORuntimeException IO异常 */ public byte[] readBytes() throws IORuntimeException { - final long len = file.length(); + final long len = this.file.length(); if (len >= Integer.MAX_VALUE) { throw new IORuntimeException("File is larger then max array size"); } final byte[] bytes = new byte[(int) len]; - FileInputStream in = null; + InputStream in = null; final int readLength; try { - in = new FileInputStream(file); + in = FileUtil.getInputStream(this.file); readLength = in.read(bytes); if(readLength < len){ throw new IOException(StrUtil.format("File length is [{}] but read [{}]!", len, readLength)); @@ -155,23 +106,25 @@ public class FileReader extends FileWrapper { * @throws IORuntimeException IO异常 */ public > T readLines(final T collection) throws IORuntimeException { - BufferedReader reader = null; - try { - reader = FileUtil.getReader(file, charset); - String line; - while (true) { - line = reader.readLine(); - if (line == null) { - break; - } - collection.add(line); + return readLines(collection, null); + } + + /** + * 从文件中读取每一行数据 + * + * @param 集合类型 + * @param collection 集合 + * @param predicate 断言,断言为真的加入到提供的集合中 + * @return 文件中的每行内容的集合 + * @throws IORuntimeException IO异常 + */ + public > T readLines(final T collection, final Predicate predicate) throws IORuntimeException { + readLines((SerConsumer) s -> { + if(null == predicate || predicate.test(s)){ + collection.add(s); } - return collection; - } catch (final IOException e) { - throw new IORuntimeException(e); - } finally { - IoUtil.close(reader); - } + }); + return collection; } /** diff --git a/hutool-core/src/test/java/cn/hutool/core/io/FileReaderTest.java b/hutool-core/src/test/java/cn/hutool/core/io/FileReaderTest.java index 0680b943a..b698b5ecf 100644 --- a/hutool-core/src/test/java/cn/hutool/core/io/FileReaderTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/io/FileReaderTest.java @@ -1,10 +1,15 @@ package cn.hutool.core.io; +import cn.hutool.core.io.file.FileUtil; +import cn.hutool.core.text.StrUtil; import org.junit.Assert; import org.junit.Test; import cn.hutool.core.io.file.FileReader; +import java.util.ArrayList; +import java.util.List; + /** * 文件读取测试 * @author Looly @@ -14,8 +19,22 @@ public class FileReaderTest { @Test public void fileReaderTest(){ - final FileReader fileReader = new FileReader("test.properties"); + final FileReader fileReader = FileReader.of(FileUtil.file("test.properties")); final String result = fileReader.readString(); Assert.assertNotNull(result); } + + @Test + public void readLinesTest() { + final FileReader fileReader = FileReader.of(FileUtil.file("test.properties")); + final List strings = fileReader.readLines(); + Assert.assertEquals(6, strings.size()); + } + + @Test + public void readLinesTest2() { + final FileReader fileReader = FileReader.of(FileUtil.file("test.properties")); + final List strings = fileReader.readLines(new ArrayList<>(), StrUtil::isNotBlank); + Assert.assertEquals(5, strings.size()); + } } diff --git a/hutool-core/src/test/java/cn/hutool/core/lang/func/LambdaFactoryTest.java b/hutool-core/src/test/java/cn/hutool/core/lang/func/LambdaFactoryTest.java index 1f066bfe9..52ed33198 100644 --- a/hutool-core/src/test/java/cn/hutool/core/lang/func/LambdaFactoryTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/lang/func/LambdaFactoryTest.java @@ -1,6 +1,7 @@ package cn.hutool.core.lang.func; import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.reflect.ConstructorUtil; import cn.hutool.core.reflect.MethodHandleUtil; import lombok.Data; import lombok.Getter; @@ -20,6 +21,7 @@ import java.util.Collection; import java.util.Comparator; import java.util.concurrent.TimeUnit; import java.util.function.BiConsumer; +import java.util.function.BiFunction; import java.util.function.Function; import java.util.function.Supplier; @@ -316,4 +318,15 @@ public class LambdaFactoryTest { } } } + + @SuppressWarnings("unchecked") + @Test + public void buildStringTest() { + final char[] a = "1234".toCharArray(); + + final Constructor constructor = ConstructorUtil.getConstructor(String.class, char[].class, boolean.class); + final BiFunction function = LambdaFactory.build(BiFunction.class, constructor); + final String apply = function.apply(a, true); + Assert.assertEquals(apply, new String(a)); + } }