Skip to content

Commit 2aa2f07

Browse files
[BAEL-3121] Added source for finding number of lines in a file
1 parent 36ad6f1 commit 2aa2f07

File tree

3 files changed

+196
-0
lines changed

3 files changed

+196
-0
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.baeldung.files;
2+
3+
import static com.baeldung.files.NumberOfLineFinder.getTotalNumberOfLinesUsingApacheCommonsIO;
4+
import static com.baeldung.files.NumberOfLineFinder.getTotalNumberOfLinesUsingBufferedReader;
5+
import static com.baeldung.files.NumberOfLineFinder.getTotalNumberOfLinesUsingGoogleGuava;
6+
import static com.baeldung.files.NumberOfLineFinder.getTotalNumberOfLinesUsingLineNumberReader;
7+
import static com.baeldung.files.NumberOfLineFinder.getTotalNumberOfLinesUsingNIOFileChannel;
8+
import static com.baeldung.files.NumberOfLineFinder.getTotalNumberOfLinesUsingNIOFiles;
9+
import static com.baeldung.files.NumberOfLineFinder.getTotalNumberOfLinesUsingScanner;
10+
11+
public class Main {
12+
13+
private static final String INPUT_FILE_NAME = "src/main/resources/input.txt";
14+
15+
public static void main(String... args) throws Exception {
16+
System.out.printf("Total Number of Lines Using BufferedReader: %s%n", getTotalNumberOfLinesUsingBufferedReader(INPUT_FILE_NAME));
17+
System.out.printf("Total Number of Lines Using LineNumberReader: %s%n", getTotalNumberOfLinesUsingLineNumberReader(INPUT_FILE_NAME));
18+
System.out.printf("Total Number of Lines Using Scanner: %s%n", getTotalNumberOfLinesUsingScanner(INPUT_FILE_NAME));
19+
System.out.printf("Total Number of Lines Using NIO Files: %s%n", getTotalNumberOfLinesUsingNIOFiles(INPUT_FILE_NAME));
20+
System.out.printf("Total Number of Lines Using NIO FileChannel: %s%n", getTotalNumberOfLinesUsingNIOFileChannel(INPUT_FILE_NAME));
21+
System.out.printf("Total Number of Lines Using Apache Commons IO: %s%n", getTotalNumberOfLinesUsingApacheCommonsIO(INPUT_FILE_NAME));
22+
System.out.printf("Total Number of Lines Using NIO Google Guava: %s%n", getTotalNumberOfLinesUsingGoogleGuava(INPUT_FILE_NAME));
23+
}
24+
}
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
package com.baeldung.files;
2+
3+
import java.io.BufferedReader;
4+
import java.io.File;
5+
import java.io.FileReader;
6+
import java.io.IOException;
7+
import java.io.LineNumberReader;
8+
import java.nio.ByteBuffer;
9+
import java.nio.channels.FileChannel;
10+
import java.nio.channels.FileChannel.MapMode;
11+
import java.nio.charset.Charset;
12+
import java.nio.file.Files;
13+
import java.nio.file.Paths;
14+
import java.nio.file.StandardOpenOption;
15+
import java.util.List;
16+
import java.util.Scanner;
17+
import java.util.stream.Stream;
18+
19+
import org.apache.commons.io.FileUtils;
20+
import org.apache.commons.io.LineIterator;
21+
22+
public class NumberOfLineFinder {
23+
24+
public static int getTotalNumberOfLinesUsingBufferedReader(String fileName) {
25+
int lines = 0;
26+
try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
27+
while (reader.readLine() != null) {
28+
lines++;
29+
}
30+
} catch (IOException ioe) {
31+
ioe.printStackTrace();
32+
}
33+
return lines;
34+
}
35+
36+
public static int getTotalNumberOfLinesUsingLineNumberReader(String fileName) {
37+
int lines = 0;
38+
try (LineNumberReader reader = new LineNumberReader(new FileReader(fileName))) {
39+
reader.skip(Integer.MAX_VALUE);
40+
lines = reader.getLineNumber() + 1;
41+
} catch (IOException ioe) {
42+
ioe.printStackTrace();
43+
}
44+
return lines;
45+
}
46+
47+
public static int getTotalNumberOfLinesUsingScanner(String fileName) {
48+
int lines = 0;
49+
try (Scanner scanner = new Scanner(new FileReader(fileName))) {
50+
while (scanner.hasNextLine()) {
51+
scanner.nextLine();
52+
lines++;
53+
}
54+
} catch (IOException ioe) {
55+
ioe.printStackTrace();
56+
}
57+
return lines;
58+
}
59+
60+
public static int getTotalNumberOfLinesUsingNIOFiles(String fileName) {
61+
int lines = 0;
62+
try (Stream<String> fileStream = Files.lines(Paths.get(fileName))) {
63+
lines = (int) fileStream.count();
64+
} catch (IOException ioe) {
65+
ioe.printStackTrace();
66+
}
67+
return lines;
68+
}
69+
70+
public static int getTotalNumberOfLinesUsingNIOFileChannel(String fileName) {
71+
int lines = 1;
72+
try (FileChannel channel = FileChannel.open(Paths.get(fileName), StandardOpenOption.READ)) {
73+
ByteBuffer byteBuffer = channel.map(MapMode.READ_ONLY, 0, channel.size());
74+
while (byteBuffer.hasRemaining()) {
75+
byte currentChar = byteBuffer.get();
76+
if (currentChar == '\n') {
77+
lines++;
78+
}
79+
}
80+
} catch (IOException ioe) {
81+
ioe.printStackTrace();
82+
}
83+
return lines;
84+
}
85+
86+
public static int getTotalNumberOfLinesUsingApacheCommonsIO(String fileName) {
87+
int lines = 0;
88+
try {
89+
LineIterator lineIterator = FileUtils.lineIterator(new File(fileName));
90+
while (lineIterator.hasNext()) {
91+
lineIterator.nextLine();
92+
lines++;
93+
}
94+
} catch (IOException ioe) {
95+
ioe.printStackTrace();
96+
}
97+
return lines;
98+
}
99+
100+
public static int getTotalNumberOfLinesUsingGoogleGuava(String fileName) {
101+
int lines = 0;
102+
try {
103+
List<String> lineItems = com.google.common.io.Files.readLines(Paths.get(fileName)
104+
.toFile(), Charset.defaultCharset());
105+
lines = lineItems.size();
106+
} catch (IOException ioe) {
107+
ioe.printStackTrace();
108+
}
109+
return lines;
110+
}
111+
112+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package com.baeldung.file;
2+
3+
import static com.baeldung.files.NumberOfLineFinder.getTotalNumberOfLinesUsingApacheCommonsIO;
4+
import static com.baeldung.files.NumberOfLineFinder.getTotalNumberOfLinesUsingBufferedReader;
5+
import static com.baeldung.files.NumberOfLineFinder.getTotalNumberOfLinesUsingGoogleGuava;
6+
import static com.baeldung.files.NumberOfLineFinder.getTotalNumberOfLinesUsingLineNumberReader;
7+
import static com.baeldung.files.NumberOfLineFinder.getTotalNumberOfLinesUsingNIOFileChannel;
8+
import static com.baeldung.files.NumberOfLineFinder.getTotalNumberOfLinesUsingNIOFiles;
9+
import static com.baeldung.files.NumberOfLineFinder.getTotalNumberOfLinesUsingScanner;
10+
import static org.junit.Assert.assertEquals;
11+
12+
import org.junit.Test;
13+
14+
public class NumberOfLineFinderUnitTest {
15+
private static final String INPUT_FILE_NAME = "src/main/resources/input.txt";
16+
private static final int ACTUAL_LINE_COUNT = 45;
17+
18+
@Test
19+
public void whenUsingBufferedReader_thenReturnTotalNumberOfLines() {
20+
int lines = getTotalNumberOfLinesUsingBufferedReader(INPUT_FILE_NAME);
21+
assertEquals(ACTUAL_LINE_COUNT, lines);
22+
}
23+
24+
@Test
25+
public void whenUsingLineNumberReader_thenReturnTotalNumberOfLines() {
26+
int lines = getTotalNumberOfLinesUsingLineNumberReader(INPUT_FILE_NAME);
27+
assertEquals(ACTUAL_LINE_COUNT, lines);
28+
}
29+
30+
@Test
31+
public void whenUsingScanner_thenReturnTotalNumberOfLines() {
32+
int lines = getTotalNumberOfLinesUsingScanner(INPUT_FILE_NAME);
33+
assertEquals(ACTUAL_LINE_COUNT, lines);
34+
}
35+
36+
@Test
37+
public void whenUsingNIOFiles_thenReturnTotalNumberOfLines() {
38+
int lines = getTotalNumberOfLinesUsingNIOFiles(INPUT_FILE_NAME);
39+
assertEquals(ACTUAL_LINE_COUNT, lines);
40+
}
41+
42+
@Test
43+
public void whenUsingNIOFileChannel_thenReturnTotalNumberOfLines() {
44+
int lines = getTotalNumberOfLinesUsingNIOFileChannel(INPUT_FILE_NAME);
45+
assertEquals(ACTUAL_LINE_COUNT, lines);
46+
}
47+
48+
@Test
49+
public void whenUsingApacheCommonsIO_thenReturnTotalNumberOfLines() {
50+
int lines = getTotalNumberOfLinesUsingApacheCommonsIO(INPUT_FILE_NAME);
51+
assertEquals(ACTUAL_LINE_COUNT, lines);
52+
}
53+
54+
@Test
55+
public void whenUsingGoogleGuava_thenReturnTotalNumberOfLines() {
56+
int lines = getTotalNumberOfLinesUsingGoogleGuava(INPUT_FILE_NAME);
57+
assertEquals(ACTUAL_LINE_COUNT, lines);
58+
}
59+
60+
}

0 commit comments

Comments
 (0)