Не читая весь код: Вы же используете FileWriter, который последовательно записывает данные в файл, каким образом идет сортировка ранее записанных значений?
Вам надо отсортировать прочитанные значения в памяти, затем все уже отсортированные записать в файл. Либо использовать RandomAccessFile, что усложнит и не без того непросто написанный код.