Я не могу понять почему возникает ошибка
1. Ввести имя файла с консоли.
2. Прочитать из него набор чисел.
3. Вывести на консоль только четные, отсортированные по возрастанию.

Пример ввода:
5
8
11
3
2
10

Пример вывода:
2
8
10

Требования:

1. Программа должна считывать данные с консоли.
2. Программа должна вывести на экран все четные числа считанные из файла отсортированные по возрастанию.
3. Программа должна выводить данные на экран.
4. Программа должна закрывать поток чтения из файла(FileInputStream).
public static void main(String[] args) throws Exception
    {
        String num2 = "2";//сделал просто для проверки парсинга
        int test = Integer.parseInt(num2);//здесь нет ошибки, всё парсит
        String tmp;
        Scanner fn = new Scanner(System.in);
        String fileName = fn.nextLine();
//        String fileName = "d:\\read.txt";//здесь сохранённый в UTF-8 текстовый файл с целыми числами на каждой строке
        BufferedReader b = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), Charset.forName("UTF-8")));
        ArrayList<String> sNums = new ArrayList<>();
        while ((tmp = b.readLine())!= null){
            sNums.add(tmp);//здесь он нормально набирает лист стрингов чисел
        }
        b.close();//Почему эта штука не закрывает InputStreamReader?!!!
        ArrayList<Integer> allNums = new ArrayList<>();//лист всех чисел
        for (int i = 0; i < sNums.size(); i++){
            tmp = sNums.get(i);//здесь в tmp я вижу "5"
            test = Integer.parseInt(tmp);//почему на этой строке ошибка NumberFormatException?!!!
            allNums.add(test);
        }
        ArrayList<Integer> curNums = new ArrayList<>();
        for (Integer n: allNums) {
            if (n%2==0)
                curNums.add(n);
        }
        Integer[] finNums = curNums.toArray(new Integer[curNums.size()]);
        Arrays.sort(finNums);
        for (Integer i:finNums){
            System.out.println(i);
        }

    }