Каков наилучший способ прочитать только одну строку большого файла, чтобы избежать проблем с памятью? - PullRequest
0 голосов
/ 10 мая 2018

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

Это просто проверка заголовка!

Ответы [ 3 ]

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

BufferedReader имеет API для чтения только одной строки.Под капотом он несколько больше буферизуется, но в целом вам не нужно об этом беспокоиться.Это идиома, которую я обычно использую:

String fileName = "..."; // use an actual file name :)
try (final FileReader fileReader = new FileReader(fileName);
            final BufferedReader bufferedReader = new BufferedReader(fileReader)) {
    // try-with-resources idiom for auto-closing the readers
    String line = null;
    while ((line = bufferedReader.readLine()) != null) {
        // Here you can deal with the line
        // Caveat: the line breaks are stripped.
        // So now you don't know if it was \r, '\n or both.
        System.out.println("--> read a line: " + line);
    }
} catch (IOException e) {
    // You might throw it too, or use a logger. Just don't hide it silently
    // because that makes debugging difficult.
    e.printStackTrace();
}
0 голосов
/ 10 мая 2018

Пожалуйста, взгляните на LineIterator , он идеально отвечает вашим потребностям.

Согласно документации, все, что вам нужно:

final File myFile = ... //A way to get your file
final LineIterator it = FileUtils.lineIterator(myFile, "UTF-8");
try {
    while (it.hasNext()) {
        final String line = it.nextLine();
        // whatever you need to do..
    }
} finally {
    it.close();
}

Удачи.

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

Просто используйте BufferedReader.readLine(). Он не буферизует более 4K символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...