# Use BufferedReader::lines

# Description

Java 8 introduced BufferedReader::lines (opens new window) to generate a stream of elements representing lines in the BufferedReader. This rule, replaces While-Loops and For-Loops that are using BufferedReader::readLine to iterate through lines of a file by a stream generated with BufferedReader::lines.

# Benefits

Using streams instead of loops improves the readability and makes the code more compact.

# Tags

# Code Changes

# While Loops

Pre

try (BufferedReader bufferedReader = new BufferedReader(new FileReader("file.name.txt"))) {			
    String line;
    while((line = bufferedReader.readLine()) != null) {
        consume(line);
    }
}

Post

try (BufferedReader bufferedReader = new BufferedReader(new FileReader("file.name.txt"))) {			
    bufferedReader.lines().forEach(line -> {
        consume(line);
    });
}

# For Loops with initializer

Pre

try (BufferedReader bufferedReader = new BufferedReader(new FileReader("file.name.txt"))) {			
    for(String line; (line = bufferedReader.readLine()) != null;) {
        consume(line);
    }
}

Post

try (BufferedReader bufferedReader = new BufferedReader(new FileReader("file.name.txt"))) {			
    bufferedReader.lines().forEach(line -> {
        consume(line);
    });
}

# For Loops without initializer

Pre

try (BufferedReader bufferedReader = new BufferedReader(new FileReader("file.name.txt"))) {			
    String line;
    for(; (line = bufferedReader.readLine()) != null;) {
        consume(line);
    }
}

Post

try (BufferedReader bufferedReader = new BufferedReader(new FileReader("file.name.txt"))) {			
    bufferedReader.lines().forEach(line -> {
        consume(line);
    });
}

Use a Java Refactoring Tool

No license required

You can review this refactoring on your code without a license by installing jSparrow to your Eclipse IDE. Install the plug-in from Eclipse IDE: Eclipse Marketplace.

System-wide Refactoring

Do you want to automate this refactoring (and many more) to your system-wide code? The automatic application of this system-wide refactoring can be unlocked by acquiring your jSparrow license.

a drawn cute bird pointing at a graph that shows positive results

# Properties

Property Value
Rule ID BufferedReaderLines
First seen in jSparrow version 3.3.0
Minimum Java version 8
Remediation cost 5 min