Как я могу прочитать конкретные строки из текстового файла в Java 8? - PullRequest
0 голосов
/ 04 мая 2018

Итак, мне нужно построчно читать текстовые файлы и возвращать их по строкам. Я могу указать, с какой строки, какую строку я хочу прочитать.

В моем классе 3 метода:

public class FilePartReader {

    String filePath;
    Integer fromLine;
    Integer toLine;

    public FilePartReader() { }

    public void setup(String filepath, Integer fromLine, Integer toLine) {
        if (fromLine < 0 || toLine <= fromLine) {
            throw new IllegalArgumentException(
                    "fromline cant be smaller than 0 and toline cant be smaller than fromline");
        }
        this.filePath = filepath;
        this.fromLine = fromLine;
        this.toLine = toLine;
    }

    public String read() throws IOException {
        String data;
        data = new String(Files.readAllBytes(Paths.get(filePath)));
        return data;
    }

    public String readLines() {
        return "todo";
    }
}

Метод read () должен открыть путь к файлу и вернуть содержимое в виде строки. readLines () должен прочитать файл с помощью read () и возвращает каждую строку из ее содержимого между fromLine и toLine (обе они включены) и возвращает эти строки в виде строки. Теперь я не уверен, что read () реализован правильно, так как, если я правильно понял, что все содержимое будет возвращено как одна большая строка, может быть, есть лучшее решение для этого? Кроме того, как я могу заставить работать fromLine / toLine? заранее спасибо

1 Ответ

0 голосов
/ 04 мая 2018

Вы можете использовать Files.lines, который возвращает Stream<String> со всеми строками и применять skip и limit к потоку результатов:

Stream<String> stream = Files.lines(Paths.get(fileName))
                             .skip(fromLine)
                             .limit(toLine - fromLine);

Это даст вам Stream строк, начиная с fromLine и заканчивая toLine. После этого вы можете преобразовать его в структуру данных (например, в список) или сделать все, что нужно.

...