统计文件行数,推荐使用LineNumberReader
一、主题:
读取文本文件最大行数性能比较:lineNumberReader > Files.lines
二、code
1 @Test 2 public void testLineReader() throws IOException { 3 File testFile = new File("D:\\temp\\test\\line.txt"); 4 if (!testFile.exists()) { 5 testFile.getParentFile().mkdirs(); 6 testFile.createNewFile(); 7 FileOutputStream fos = new FileOutputStream(testFile, true); 8 long line = 10000000; 9 while (line-- > 0) { 10 fos.write((line + System.getProperty("line.separator")).getBytes()); 11 } 12 } 13 14 long startTime = System.currentTimeMillis(); 15 long count = 0; 16 for(int i = 0; i<1000; i++) 17 count = Files.lines(Paths.get(testFile.getPath())).count(); 18 long endTime = System.currentTimeMillis(); 19 System.out.println("files.lines lines:" + count +"spend time:" + (endTime - startTime) + " ms"); 20 21 long startTime2 = System.currentTimeMillis(); 22 long fileLength = testFile.length(); 23 for(int i = 0; i<1000; i++){ 24 LineNumberReader lineNumberReader = new LineNumberReader(new FileReader(testFile)); 25 lineNumberReader.skip(fileLength); 26 count = lineNumberReader.getLineNumber(); 27 lineNumberReader.close(); 28 } 29 long endTime2 = System.currentTimeMillis(); 30 System.out.println("lines:" + count +"spend time:" + (endTime2 - startTime2) + " ms"); 31 }
二、测试结果:
files.lines lines:10000000spend time:333404 ms
lines:10000000spend time:174362 ms
三、结论:
1.使用LineNumberReader统计速度是Files.lines的两倍
2.Files.lines代码比LineNumberReader要简洁许多