FileWriter增加方法,可选是否追加换行符(issue#3858@Github)

This commit is contained in:
Looly 2025-02-18 18:34:14 +08:00
parent 7608e08c2e
commit f3c97bdc4d
2 changed files with 23 additions and 7 deletions

View File

@ -629,10 +629,16 @@ public class FileUtil extends PathUtil {
readChars = is.read(chars);
}
// 最后一个字符为换行符则单独计数行
// Linux下最后一行要求必须有换行符不能单独计算一行此处交给用户选择
if(lastLineSeparatorAsNewLine && c == CharUtil.CR){
++count;
if(lastLineSeparatorAsNewLine){
// 最后一个字符为\r则单独计数行
if(c == CharUtil.CR){
++count;
}
}else{
// 最后一个字符为\n则可选是否算作新行单独计数行
if(c == CharUtil.LF){
--count;
}
}
return count;

View File

@ -4,6 +4,7 @@ import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.io.file.LineSeparator;
import cn.hutool.core.lang.Console;
import cn.hutool.core.util.CharsetUtil;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
@ -538,22 +539,31 @@ public class FileUtilTest {
@Test
public void getTotalLinesTest() {
// 此文件最后一行有换行符则最后的空行算作一行
final int totalLines = FileUtil.getTotalLines(FileUtil.file("test_lines.csv"));
int totalLines = FileUtil.getTotalLines(FileUtil.file("test_lines.csv"));
assertEquals(8, totalLines);
totalLines = FileUtil.getTotalLines(FileUtil.file("test_lines.csv"), -1, false);
Assertions.assertEquals(7, totalLines);
}
@Test
public void getTotalLinesCrTest() {
// 此文件最后一行有换行符则最后的空行算作一行
final int totalLines = FileUtil.getTotalLines(FileUtil.file("test_lines_cr.csv"));
int totalLines = FileUtil.getTotalLines(FileUtil.file("test_lines_cr.csv"));
assertEquals(8, totalLines);
totalLines = FileUtil.getTotalLines(FileUtil.file("test_lines_cr.csv"), -1, false);
Assertions.assertEquals(7, totalLines);
}
@Test
public void getTotalLinesCrlfTest() {
// 此文件最后一行有换行符则最后的空行算作一行
final int totalLines = FileUtil.getTotalLines(FileUtil.file("test_lines_crlf.csv"));
int totalLines = FileUtil.getTotalLines(FileUtil.file("test_lines_crlf.csv"));
assertEquals(8, totalLines);
totalLines = FileUtil.getTotalLines(FileUtil.file("test_lines_crlf.csv"), -1, false);
Assertions.assertEquals(7, totalLines);
}
@Test