diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/io/file/FileUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/io/file/FileUtil.java index 6e2ebe14f..c1cc7265a 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/io/file/FileUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/io/file/FileUtil.java @@ -2152,28 +2152,24 @@ public class FileUtil extends PathUtil { /** * 获得一个输出流对象 * - * @param file 文件 + * @param file 文件 + * @param options 选项,如追加模式传{@link java.nio.file.StandardOpenOption#APPEND} * @return 输出流对象 * @throws IORuntimeException IO异常 */ - public static BufferedOutputStream getOutputStream(final File file) throws IORuntimeException { - final OutputStream out; - try { - out = Files.newOutputStream(touch(file).toPath()); - } catch (final IOException e) { - throw new IORuntimeException(e); - } - return IoUtil.toBuffered(out); + public static BufferedOutputStream getOutputStream(final File file, final OpenOption... options) throws IORuntimeException { + return PathUtil.getOutputStream(touch(file).toPath(), options); } /** * 获得一个输出流对象 * - * @param path 输出到的文件路径,绝对路径 + * @param path 输出到的文件路径,绝对路径 + * @param options 选项,如追加模式传{@link java.nio.file.StandardOpenOption#APPEND} * @return 输出流对象 * @throws IORuntimeException IO异常 */ - public static BufferedOutputStream getOutputStream(final String path) throws IORuntimeException { + public static BufferedOutputStream getOutputStream(final String path, final OpenOption... options) throws IORuntimeException { return getOutputStream(touch(path)); } diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/io/file/FileWriter.java b/hutool-core/src/main/java/org/dromara/hutool/core/io/file/FileWriter.java index fcd277635..3d3acccdd 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/io/file/FileWriter.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/io/file/FileWriter.java @@ -22,17 +22,9 @@ import org.dromara.hutool.core.lang.Assert; import org.dromara.hutool.core.text.StrUtil; import org.dromara.hutool.core.util.CharsetUtil; -import java.io.BufferedOutputStream; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.PrintWriter; +import java.io.*; import java.nio.charset.Charset; -import java.nio.file.Files; +import java.nio.file.OpenOption; import java.util.Map; import java.util.Map.Entry; @@ -216,13 +208,13 @@ public class FileWriter extends FileWrapper { boolean isFirst = true; for (final T t : list) { if (null != t) { - if(isFirst){ + if (isFirst) { isFirst = false; - if(isAppend && FileUtil.isNotEmpty(this.file)){ + if (isAppend && FileUtil.isNotEmpty(this.file)) { // 追加模式下且文件非空,补充换行符 printNewLine(writer, lineSeparator); } - } else{ + } else { printNewLine(writer, lineSeparator); } writer.print(t); @@ -338,17 +330,16 @@ public class FileWriter extends FileWrapper { * * @param in 输入流,不关闭 * @param isCloseIn 是否关闭输入流 + * @param options 选项,如追加模式传{@link java.nio.file.StandardOpenOption#APPEND} * @return file * @throws IORuntimeException IO异常 * @since 5.5.2 */ - public File writeFromStream(final InputStream in, final boolean isCloseIn) throws IORuntimeException { + public File writeFromStream(final InputStream in, final boolean isCloseIn, final OpenOption... options) throws IORuntimeException { OutputStream out = null; try { - out = Files.newOutputStream(FileUtil.touch(file).toPath()); + out = FileUtil.getOutputStream(file, options); IoUtil.copy(in, out); - } catch (final IOException e) { - throw new IORuntimeException(e); } finally { IoUtil.closeQuietly(out); if (isCloseIn) { @@ -361,15 +352,12 @@ public class FileWriter extends FileWrapper { /** * 获得一个输出流对象 * + * @param options 选项,如追加模式传{@link java.nio.file.StandardOpenOption#APPEND} * @return 输出流对象 * @throws IORuntimeException IO异常 */ - public BufferedOutputStream getOutputStream() throws IORuntimeException { - try { - return new BufferedOutputStream(Files.newOutputStream(FileUtil.touch(file).toPath())); - } catch (final IOException e) { - throw new IORuntimeException(e); - } + public BufferedOutputStream getOutputStream(final OpenOption... options) throws IORuntimeException { + return FileUtil.getOutputStream(file, options); } /** diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/io/file/PathUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/io/file/PathUtil.java index ffb97b45c..94ab00869 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/io/file/PathUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/io/file/PathUtil.java @@ -94,6 +94,7 @@ public class PathUtil { } // region ----- loop and walk + /** * 递归遍历目录以及子目录中的所有文件
* 如果提供path为文件,直接返回过滤结果 @@ -232,6 +233,7 @@ public class PathUtil { } // region ----- copy + /** * 拷贝资源到目标文件 *