add methods

This commit is contained in:
Looly 2021-03-14 10:09:29 +08:00
parent 2337e3a367
commit 65d60a79fe
3 changed files with 107 additions and 5 deletions

View File

@ -7,6 +7,8 @@
### 新特性
* 【crypto 】 SecureUtil去除final修饰符issue#1474@Github
* 【core 】 IoUtil增加lineIter方法
### Bug修复
* 【core 】 修复IoUtil.readBytes的FileInputStream中isClose参数失效问题issue#I3B7UD@Gitee

View File

@ -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<br>
* 此对象遍历结束后应关闭之推荐使用方式:
@ -70,7 +70,8 @@ public class LineIter implements Iterator<String>, Iterable<String>, Closeable,
// -----------------------------------------------------------------------
/**
* 判断{@link Reader}是否可以存在下一行 If there is an <code>IOException</code> 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异常

View File

@ -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标记的流<br>
* 若原流支持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();
}
/**
* 返回行遍历器
* <pre>
* LineIterator it = null;
* try {
* it = IoUtil.lineIter(reader);
* while (it.hasNext()) {
* String line = it.nextLine();
* // do something with line
* }
* } finally {
* it.close();
* }
* </pre>
*
* @param reader {@link Reader}
* @return {@link LineIter}
* @since 5.6.1
*/
public static LineIter lineIter(Reader reader){
return new LineIter(reader);
}
/**
* 返回行遍历器
* <pre>
* 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();
* }
* </pre>
*
* @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);
}
}