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); readChars = is.read(chars);
} }
// 最后一个字符为换行符则单独计数行 if(lastLineSeparatorAsNewLine){
// Linux下最后一行要求必须有换行符不能单独计算一行此处交给用户选择 // 最后一个字符为\r则单独计数行
if(lastLineSeparatorAsNewLine && c == CharUtil.CR){ if(c == CharUtil.CR){
++count; ++count;
}
}else{
// 最后一个字符为\n则可选是否算作新行单独计数行
if(c == CharUtil.LF){
--count;
}
} }
return 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.io.file.LineSeparator;
import cn.hutool.core.lang.Console; import cn.hutool.core.lang.Console;
import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.CharsetUtil;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@ -538,22 +539,31 @@ public class FileUtilTest {
@Test @Test
public void getTotalLinesTest() { 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); assertEquals(8, totalLines);
totalLines = FileUtil.getTotalLines(FileUtil.file("test_lines.csv"), -1, false);
Assertions.assertEquals(7, totalLines);
} }
@Test @Test
public void getTotalLinesCrTest() { 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); assertEquals(8, totalLines);
totalLines = FileUtil.getTotalLines(FileUtil.file("test_lines_cr.csv"), -1, false);
Assertions.assertEquals(7, totalLines);
} }
@Test @Test
public void getTotalLinesCrlfTest() { 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); assertEquals(8, totalLines);
totalLines = FileUtil.getTotalLines(FileUtil.file("test_lines_crlf.csv"), -1, false);
Assertions.assertEquals(7, totalLines);
} }
@Test @Test