Задачу я решила через массив, но это вторая версия решения, которая не работала. В файл записывалась абракадабра. Если на печать выводить элементы списка, то, при чтении посимвольно число 3.1 считывается "3", ".", "1", то есть косяк в том, что я неправильно считываю элементы в список. Как я могу поправить такой вариант решения, чтобы все работало? Условие: Округление чисел Считать с консоли 2 имени файла. Первый файл содержит вещественные(дробные) числа, разделенные пробелом. Например, 3.1415. Округлить числа до целых и записать через пробел во второй файл. Закрыть потоки. Принцип округления: 3.49 => 3 3.50 => 4 3.51 => 4 -3.49 => -3 -3.50 => -3 -3.51 => -4 Requirements: 1. Программа должна два раза считать имена файлов с консоли. 2. Для первого файла создай поток для чтения. Для второго - поток для записи. 3. Считать числа из первого файла, округлить их и записать через пробел во второй. 4. Должны соблюдаться принципы округления, указанные в задании. 5. Созданные для файлов потоки должны быть закрыты. Решение BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String fileName1 = reader.readLine(); String fileName2 = reader.readLine(); ArrayList<String> strings = new ArrayList<>(); try (FileReader fileInput = new FileReader(fileName1); FileWriter fileOuput = new FileWriter(fileName2)) { while (fileInput.ready()) { char ch = (char) fileInput.read(); strings.add(Character.toString(ch)); } for (int i = 0; i < strings.size(); i++) { if (strings.get(i).equals(" ")) { strings.remove(strings.get(i)); } } for (String s: strings ) { System.out.print(s + " "); } System.out.println(); for (int i = 0; i <strings.size(); i++) { try { double dataD = Double.parseDouble(strings.get(i)); System.out.print(dataD + " "); long data = (long) Math.round(dataD); fileOuput.write(data + " "); } catch (NumberFormatException e) { } } }