In the following code example you will learn how to read file contents line by line using the Apache Commons FileUtils.lineIterator()
method. Reading file contents one line at a time, do some processing, and release it from memory immediately will lower the memory consumption used by your program.
The snippet below give you the basic usage of the FileUtils.lineIterator()
method. You pass the file to read and the encoding to use. An Iterator
of the lines in the file will be returned. Use the hasNext()
method to see if there are lines to read from the iterator. The nextLine()
method will give you the next line from the file.
When we finished with the iterator we need to close it using the LineIterator.close()
or LineIterator.closeQuietly()
method.
package org.kodejava.commons.io;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.LineIterator;
import java.io.File;
import java.net.URL;
import java.util.Objects;
public class ReadFileLineByLine {
public static void main(String[] args) throws Exception {
// Load file from resource directory.
ClassLoader classLoader = ReadFileLineByLine.class.getClassLoader();
URL url = Objects.requireNonNull(classLoader.getResource("data.txt"),
"Resource could not be found.");
File file = new File(url.getFile());
try (LineIterator iterator = FileUtils.lineIterator(file, "UTF-8")) {
while (iterator.hasNext()) {
String line = iterator.nextLine();
System.out.println("line = " + line);
}
}
}
}
In the example above we load the file from a resource directory. That’s why we use the ClassLoader.getResource()
method. If you want to load a file from an absolute path you can simply create a File
object and pass the absolute path to the file.
Maven Dependencies
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.13.0</version>
</dependency>