Дополнительно
Как прочитать большой текстовый файл построчно с помощью Java?
Мне нужно прочитать большой текстовый файл размером около 5-6 ГБ построчно, используя Java.
Как я могу сделать это быстро?
811
20
Общий шаблон использовать
Вы можете считывать данные быстрее, если вы предполагаете, нет кодировки. например, в ASCII-7, но он выиграл'т сделать большой разницы. Весьма вероятно, что то, что вы делаете с данными, займет гораздо больше времени.
Редактировать: менее распространенный шаблон, чтобы использовать, чтобы избежать охвата
линия
утечка.Обновление: в Java 8 вы можете сделать
Примечание: Вы должны поместить поток в попытки с ресурсами блок для обеспечения #метод close вызывается, в противном случае исходный файл, дескриптор не закрыт до ГК это гораздо позже.
Посмотрите на этот блог:
Один раз [тегов:на Java 8] вышел (март 2014) вы'll быть в состоянии использовать потоки:
Печать всех строк в файле:
Вот пример с обработкой полный ошибок и поддерживая спецификация кодировку до версии Java 7. С Java 7 Вы можете использовать try-с-ресурсами синтаксиса, который делает чище код.
Если вы просто хотите, чтобы кодировку можно пропустить InputStream и использовать FileReader.
Вот Groovy-версии, с полной обработкой ошибок:
В Java 8, вы могли бы сделать:
Некоторые заметки: поток возвращаемых файлов.линий (в отличие от большинства потоков) должен быть закрыт. По причинам, упомянутые здесь я не использую
еогеасп()
. В чужом коде(повторяемое в<строка> В) строки::итератор
бросает поток повторяемое.Что вы можете сделать, это отсканировать весь текст через сканер, и пройти через текст построчно. Конечно, вы должны импортировать следующие:
Сканер в основном сканирует весь текст. Цикл while используется, чтобы пройти через весь текст.
Этот
.функция hasNextLine ()
- это логическое значение, которое возвращает true, если есть еще несколько строк в тексте. Этот.строки()
функция дает вам всю строку как строку, затем вы можете использовать, как вы хотите. Попробовать Систему.из.код println(линия) для печати текста.Примечание Стороны: .txt-это текстовый тип файла.
FileReader выиграл'т позвольте вам указать кодировку, использовать InputStreamReader вместо этого, если вам нужно указать:
Если вы импортировали этот файл из Windows, он может иметь кодировку ANSI (Cp1252), поэтому вы должны указать кодировку.
В Java 7:
Я задокументирован и проверен 10 разных способов чтения файла в Java, а затем запустил их друг против друга, заставляя их читать в тестовые файлы от 1 Кб до 1 ГБ. Здесь представлены быстрый файл 3 методы чтения для чтения тестового файла 1ГБ.
Обратите внимание, что при запуске тестов производительности я не'т ничего в консоль так что бы реально замедлить теста. Я просто хотел проверить скорость сырое значение.
Тестирование в Java 7, 8, 9. Это было в целом, самый быстрый способ. Чтение файла 1ГБ стабильно раз в 1 секунду.
Это было успешно протестировано в Java 8 и 9, но он выиграл't работа в Java 7 из-за отсутствия поддержки лямбда-выражений. Это заняло около 3.5 секунд, чтобы прочитать в файле 1 Гб, который поставит его на второе место как чтение больших файлов.
Протестирован для работы в Java 7, 8, 9. Это произошло около 4,5 секунд на чтение в тестовый файл 1ГБ.
Вы можете найти полный рейтинг по всем 10 способов чтения файла здесь.
В Java 8, есть также альтернативы с помощью файлов
.линии()
. Если нет источника входного сигнала'т файл, но что-то более абстрактное, какчитатель
илипотока
, вы можете stream линий по линий по командой bufferedreader()` метод.Например:
в
буду называть processLine () для каждой входной строки прочитаны
командой bufferedreader
.Для чтение файла с Java 8
Вы можете использовать класс Scanner
Вам необходимо использовать метод
readLine()
в классеclass BufferedReader
. Создайте новый объект из этого класса, примените к нему этот метод и сохраните его в строке.BufferReader Javadoc
Ява-9 :
Ясный путь для достижения этого
Например:
Если у вас есть `dataFile.txt на ваш текущий каталог
Выход вроде как ниже,
Это работает для меня. Надеюсь, что это поможет вам тоже.
Я обычно делаю чтение обычной простой:
Вы можете использовать потоки, чтобы сделать его более точно:
с помощью орг."Апач".общин.Ио пакет дал более высокую производительность, особенно в legacy код, который использует Java 6 и ниже. Java7 имеет лучший API с меньшим количеством исключений управляемость и более полезными методами
Мэйвен
Вы также можете использовать
Апач Викискладе Ио
: