Как сказано в комментарии Дхрува, один из возможных подходов - использовать внешнюю сортировку.
Что вы хотели бы сделать, это создать объект, который инкапсулирует каждую строку вашего файла, и создать собственный компаратор, который сортируетпо критериям, которые вам нужны.Помните, что вам не нужно сопоставлять каждый столбец в строке со свойством Object, вы можете просто иметь свойство, содержащее первый столбец каждой строки, для использования в качестве свойства сравнения, и другое свойство, содержащее всю строку.
Загрузка фрагмента файла строка за строкой в коллекцию указанного типа объекта.Сортируйте это, используя ваш собственный компаратор.Запишите коллекцию во временный файл.Повторяйте до конца исходного файла.
В итоге вы получите несколько файлов меньшего размера, отсортированных по отдельности.Теперь вы используете шаг «слияния» внешней сортировки, чтобы создать новый файл, содержащий все отсортированные строки.Прочитайте первую строку каждого файла, запишите наименьшую из них в отсортированный файл, прочитайте новую строку из файла, который имел наименьшую.Повторяйте, пока все временные файлы не станут пустыми.
Готово.