mirror of
https://gitee.com/dromara/hutool.git
synced 2025-06-28 13:34:09 +08:00
FileWriter
增加方法,可选是否追加换行符(issue#3858@Github)
This commit is contained in:
parent
35f0e368d2
commit
7608e08c2e
@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
### 🐣新特性
|
### 🐣新特性
|
||||||
* 【json 】 ObjectMapper删除重复trim(pr#3859@Github)
|
* 【json 】 ObjectMapper删除重复trim(pr#3859@Github)
|
||||||
|
* 【core 】 `FileWriter`增加方法,可选是否追加换行符(issue#3858@Github)
|
||||||
|
|
||||||
### 🐞Bug修复
|
### 🐞Bug修复
|
||||||
|
|
||||||
|
@ -561,7 +561,8 @@ public class FileUtil extends PathUtil {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 计算文件的总行数<br>
|
* 计算文件的总行数<br>
|
||||||
* 参考:https://stackoverflow.com/questions/453018/number-of-lines-in-a-file-in-java
|
* 参考:https://stackoverflow.com/questions/453018/number-of-lines-in-a-file-in-java<br>
|
||||||
|
* 最后一行如果末尾带有换行符,则被当作为新行
|
||||||
*
|
*
|
||||||
* @param file 文件
|
* @param file 文件
|
||||||
* @param bufferSize 缓存大小,小于1则使用默认的1024
|
* @param bufferSize 缓存大小,小于1则使用默认的1024
|
||||||
@ -569,6 +570,20 @@ public class FileUtil extends PathUtil {
|
|||||||
* @since 5.8.28
|
* @since 5.8.28
|
||||||
*/
|
*/
|
||||||
public static int getTotalLines(File file, int bufferSize) {
|
public static int getTotalLines(File file, int bufferSize) {
|
||||||
|
return getTotalLines(file, bufferSize, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算文件的总行数<br>
|
||||||
|
* 参考:https://stackoverflow.com/questions/453018/number-of-lines-in-a-file-in-java
|
||||||
|
*
|
||||||
|
* @param file 文件
|
||||||
|
* @param bufferSize 缓存大小,小于1则使用默认的1024
|
||||||
|
* @param lastLineSeparatorAsNewLine 是否将最后一行分隔符作为新行,Linux下要求最后一行必须带有换行符,不算一行,此处用户选择
|
||||||
|
* @return 该文件总行数
|
||||||
|
* @since 5.8.37
|
||||||
|
*/
|
||||||
|
public static int getTotalLines(File file, int bufferSize, boolean lastLineSeparatorAsNewLine) {
|
||||||
if (false == isFile(file)) {
|
if (false == isFile(file)) {
|
||||||
throw new IORuntimeException("Input must be a File");
|
throw new IORuntimeException("Input must be a File");
|
||||||
}
|
}
|
||||||
@ -615,7 +630,8 @@ public class FileUtil extends PathUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 最后一个字符为换行符,则单独计数行
|
// 最后一个字符为换行符,则单独计数行
|
||||||
if(c == CharUtil.CR){
|
// Linux下最后一行要求必须有换行符,不能单独计算一行,此处交给用户选择
|
||||||
|
if(lastLineSeparatorAsNewLine && c == CharUtil.CR){
|
||||||
++count;
|
++count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -159,7 +159,7 @@ public class FileWriter extends FileWrapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 将列表写入文件,覆盖模式
|
* 将列表写入文件,覆盖模式,最后一行末尾不追加换行符
|
||||||
*
|
*
|
||||||
* @param <T> 集合元素类型
|
* @param <T> 集合元素类型
|
||||||
* @param list 列表
|
* @param list 列表
|
||||||
@ -171,7 +171,7 @@ public class FileWriter extends FileWrapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 将列表写入文件,追加模式
|
* 将列表写入文件,追加模式,最后一行末尾不追加换行符
|
||||||
*
|
*
|
||||||
* @param <T> 集合元素类型
|
* @param <T> 集合元素类型
|
||||||
* @param list 列表
|
* @param list 列表
|
||||||
@ -183,7 +183,7 @@ public class FileWriter extends FileWrapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 将列表写入文件
|
* 将列表写入文件,最后一行末尾不追加换行符
|
||||||
*
|
*
|
||||||
* @param <T> 集合元素类型
|
* @param <T> 集合元素类型
|
||||||
* @param list 列表
|
* @param list 列表
|
||||||
@ -196,7 +196,7 @@ public class FileWriter extends FileWrapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 将列表写入文件
|
* 将列表写入文件,最后一行末尾不追加换行符
|
||||||
*
|
*
|
||||||
* @param <T> 集合元素类型
|
* @param <T> 集合元素类型
|
||||||
* @param list 列表
|
* @param list 列表
|
||||||
@ -207,6 +207,22 @@ public class FileWriter extends FileWrapper {
|
|||||||
* @since 3.1.0
|
* @since 3.1.0
|
||||||
*/
|
*/
|
||||||
public <T> File writeLines(Iterable<T> list, LineSeparator lineSeparator, boolean isAppend) throws IORuntimeException {
|
public <T> File writeLines(Iterable<T> list, LineSeparator lineSeparator, boolean isAppend) throws IORuntimeException {
|
||||||
|
return writeLines(list, lineSeparator, isAppend, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将列表写入文件
|
||||||
|
*
|
||||||
|
* @param <T> 集合元素类型
|
||||||
|
* @param list 列表
|
||||||
|
* @param lineSeparator 换行符枚举(Windows、Mac或Linux换行符)
|
||||||
|
* @param isAppend 是否追加
|
||||||
|
* @param appendLineSeparator 是否在最后一行末尾追加换行符,Linux下要求最后一行必须带有换行符
|
||||||
|
* @return 目标文件
|
||||||
|
* @throws IORuntimeException IO异常
|
||||||
|
* @since 5.8.37
|
||||||
|
*/
|
||||||
|
public <T> File writeLines(Iterable<T> list, LineSeparator lineSeparator, boolean isAppend, boolean appendLineSeparator) throws IORuntimeException {
|
||||||
try (PrintWriter writer = getPrintWriter(isAppend)) {
|
try (PrintWriter writer = getPrintWriter(isAppend)) {
|
||||||
boolean isFirst = true;
|
boolean isFirst = true;
|
||||||
for (T t : list) {
|
for (T t : list) {
|
||||||
@ -221,6 +237,9 @@ public class FileWriter extends FileWrapper {
|
|||||||
printNewLine(writer, lineSeparator);
|
printNewLine(writer, lineSeparator);
|
||||||
}
|
}
|
||||||
writer.print(t);
|
writer.print(t);
|
||||||
|
if(appendLineSeparator){
|
||||||
|
printNewLine(writer, lineSeparator);
|
||||||
|
}
|
||||||
|
|
||||||
writer.flush();
|
writer.flush();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user