Написал простой и лаконичный код, сортировку по ASCII проверил совпадает, значение символа и частота то же соответствует. Ума не приложу где ошибка.
public class Solution {
    public static void main(String[] args) {
        ArrayList<Integer> ari = new ArrayList<>();
        try {
            FileReader reader = new FileReader(args[0]);
            while (reader.ready()) {
                int data = reader.read();
                ari.add(data);
            }
            reader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        // System.out.println(ari.toString());
        Collections.sort(ari);
        //System.out.println("Размер файла байт " + ari.size());
        //System.out.println(ari.toString());
        //System.out.println(Character.toChars(ari.get(2)));
        int count = 1;
        for (int i = 0; i < ari.size() - 1; i++) {
            //  if (ari.get(i-1)<32 || ari.get(i-1)>127) continue;
            if (ari.get(i) > 128) continue;
            if (Objects.equals(ari.get(i), ari.get(i + 1)))
                count++;
            if (!Objects.equals(ari.get(i + 1), ari.get(i))) {
                //System.out.print(ari.get(i - 1) + "'" + Arrays.toString(Character.toChars(ari.get(i - 1))).substring(1,2) + "'=" + count + ", ");
                System.out.println(Arrays.toString(Character.toChars(ari.get(i))).charAt(1) + " " + count);
                count = 1;
            }
        }
        //код, который отдельно проверяет последний элемент отсортированного массива с предпоследним элементом
        //если последний элемент массива уникальный и в таблице ascii менше значения 128 то выведи его на экран
        if (!Objects.equals(ari.get(ari.size() - 2), ari.get(ari.size() - 1)) && ari.get(ari.size() - 1) < 128)
            System.out.println(Arrays.toString(Character.toChars(ari.get(ari.size() - 1))).charAt(1) + " " + 1);
    }
}