新增:获取文件行数FileUtil.getTotalLines

This commit is contained in:
tjh 2022-02-22 15:33:34 +08:00
parent 4cb2bc42cd
commit 791e0bb85f
2 changed files with 35 additions and 15 deletions

View File

@ -22,21 +22,7 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.URLUtil;
import cn.hutool.core.util.ZipUtil;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.RandomAccessFile;
import java.io.Reader;
import java.io.*;
import java.net.URI;
import java.net.URL;
import java.net.URLConnection;
@ -567,6 +553,32 @@ public class FileUtil extends PathUtil {
}
}
/**
* 计算文件的总行数
*
* @param file 文件
* @return 该文件总行数
*/
public static int getTotalLines(File file) {
if (!isFile(file)) {
throw new IORuntimeException("input must be file");
}
try (
final BufferedReader reader = getReader(file, CharsetUtil.CHARSET_UTF_8);
final LineNumberReader lineNumberReader = new LineNumberReader(reader)
) {
// 设置起始为1
lineNumberReader.setLineNumber(1);
// 跳过文件中内容
lineNumberReader.skip(Long.MAX_VALUE);
// 获取当前行号
return lineNumberReader.getLineNumber();
} catch (IOException e) {
throw new IORuntimeException(e);
}
}
/**
* 给定文件或目录的最后修改时间是否晚于给定时间
*

View File

@ -466,4 +466,12 @@ public class FileUtilTest {
Assert.assertTrue(FileUtil.getPrefix(prefixDirTempFile).startsWith("prefix"));
}
@Test
@Ignore
public void getTotalLinesTest() {
// 千万行秒级内返回
final int totalLines = FileUtil.getTotalLines(FileUtil.file(""));
Assert.assertEquals(10000000, totalLines);
}
}