diff --git a/CHANGELOG.md b/CHANGELOG.md index 79c8e7622..2feeb3027 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ ### 新特性 * 【crypto 】 SecureUtil去除final修饰符(issue#1474@Github) +* 【core 】 IoUtil增加lineIter方法 + ### Bug修复 * 【core 】 修复IoUtil.readBytes的FileInputStream中isClose参数失效问题(issue#I3B7UD@Gitee) diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/LineIter.java b/hutool-core/src/main/java/cn/hutool/core/collection/LineIter.java index eafbaa841..8b0e1cc2e 100644 --- a/hutool-core/src/main/java/cn/hutool/core/collection/LineIter.java +++ b/hutool-core/src/main/java/cn/hutool/core/collection/LineIter.java @@ -1,5 +1,9 @@ package cn.hutool.core.collection; +import cn.hutool.core.io.IORuntimeException; +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.lang.Assert; + import java.io.BufferedReader; import java.io.Closeable; import java.io.IOException; @@ -10,10 +14,6 @@ import java.nio.charset.Charset; import java.util.Iterator; import java.util.NoSuchElementException; -import cn.hutool.core.io.IORuntimeException; -import cn.hutool.core.io.IoUtil; -import cn.hutool.core.lang.Assert; - /** * 将Reader包装为一个按照行读取的Iterator
* 此对象遍历结束后,应关闭之,推荐使用方式: @@ -70,7 +70,8 @@ public class LineIter implements Iterator, Iterable, Closeable, // ----------------------------------------------------------------------- /** - * 判断{@link Reader}是否可以存在下一行。 If there is an IOException then {@link #close()} will be called on this instance. + * 判断{@link Reader}是否可以存在下一行。 + * If there is an {@code IOException} then {@link #close()} will be called on this instance. * * @return {@code true} 表示有更多行 * @throws IORuntimeException IO异常 diff --git a/hutool-core/src/main/java/cn/hutool/core/io/IoUtil.java b/hutool-core/src/main/java/cn/hutool/core/io/IoUtil.java index 37176fded..283feed1b 100644 --- a/hutool-core/src/main/java/cn/hutool/core/io/IoUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/IoUtil.java @@ -1,5 +1,6 @@ package cn.hutool.core.io; +import cn.hutool.core.collection.LineIter; import cn.hutool.core.convert.Convert; import cn.hutool.core.exceptions.UtilException; import cn.hutool.core.lang.Assert; @@ -10,6 +11,7 @@ import cn.hutool.core.util.StrUtil; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; +import java.io.BufferedWriter; import java.io.ByteArrayInputStream; import java.io.Closeable; import java.io.File; @@ -846,6 +848,56 @@ public class IoUtil extends NioUtil { return (out instanceof BufferedOutputStream) ? (BufferedOutputStream) out : new BufferedOutputStream(out, bufferSize); } + /** + * 转换为{@link BufferedReader} + * + * @param reader {@link Reader} + * @return {@link BufferedReader} + * @since 5.6.1 + */ + public static BufferedReader toBuffered(Reader reader) { + Assert.notNull(reader, "Reader must be not null!"); + return (reader instanceof BufferedReader) ? (BufferedReader) reader : new BufferedReader(reader); + } + + /** + * 转换为{@link BufferedReader} + * + * @param reader {@link Reader} + * @param bufferSize buffer size + * @return {@link BufferedReader} + * @since 5.6.1 + */ + public static BufferedReader toBuffered(Reader reader, int bufferSize) { + Assert.notNull(reader, "Reader must be not null!"); + return (reader instanceof BufferedReader) ? (BufferedReader) reader : new BufferedReader(reader, bufferSize); + } + + /** + * 转换为{@link BufferedWriter} + * + * @param writer {@link Writer} + * @return {@link BufferedWriter} + * @since 5.6.1 + */ + public static BufferedWriter toBuffered(Writer writer) { + Assert.notNull(writer, "Writer must be not null!"); + return (writer instanceof BufferedWriter) ? (BufferedWriter) writer : new BufferedWriter(writer); + } + + /** + * 转换为{@link BufferedWriter} + * + * @param writer {@link Writer} + * @param bufferSize buffer size + * @return {@link BufferedWriter} + * @since 5.6.1 + */ + public static BufferedWriter toBuffered(Writer writer, int bufferSize) { + Assert.notNull(writer, "Writer must be not null!"); + return (writer instanceof BufferedWriter) ? (BufferedWriter) writer : new BufferedWriter(writer, bufferSize); + } + /** * 将{@link InputStream}转换为支持mark标记的流
* 若原流支持mark标记,则返回原流,否则使用{@link BufferedInputStream} 包装之 @@ -1214,4 +1266,51 @@ public class IoUtil extends NioUtil { public static long checksumValue(InputStream in, Checksum checksum) { return checksum(in, checksum).getValue(); } + + /** + * 返回行遍历器 + *
+	 * LineIterator it = null;
+	 * try {
+	 * 	it = IoUtil.lineIter(reader);
+	 * 	while (it.hasNext()) {
+	 * 		String line = it.nextLine();
+	 * 		// do something with line
+	 * 	}
+	 * } finally {
+	 * 		it.close();
+	 * }
+	 * 
+ * + * @param reader {@link Reader} + * @return {@link LineIter} + * @since 5.6.1 + */ + public static LineIter lineIter(Reader reader){ + return new LineIter(reader); + } + + /** + * 返回行遍历器 + *
+	 * LineIterator it = null;
+	 * try {
+	 * 	it = IoUtil.lineIter(in, CharsetUtil.CHARSET_UTF_8);
+	 * 	while (it.hasNext()) {
+	 * 		String line = it.nextLine();
+	 * 		// do something with line
+	 * 	}
+	 * } finally {
+	 * 		it.close();
+	 * }
+	 * 
+ * + * @param in {@link InputStream} + * @param charset 编码 + * @return {@link LineIter} + * @since 5.6.1 + */ + public static LineIter lineIter(InputStream in, Charset charset){ + return new LineIter(in, charset); + } }