Дополнительно
Java: Чтение целых чисел из файла в массив
File fil = new File("Tall.txt");
FileReader inputFil = new FileReader(fil);
BufferedReader in = new BufferedReader(inputFil);
int [] tall = new int [100];
String s =in.readLine();
while(s!=null)
{
int i = 0;
tall[i] = Integer.parseInt(s); //this is line 19
System.out.println(tall[i]);
s = in.readLine();
}
in.close();
Я пытаюсь использовать файл "Tall.txt" для записи содержащихся в нем целых чисел в массив с именем "tall". В некоторой степени это удается, но когда я запускаю его, он выбрасывает следующее исключение (:
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at BinarySok.main(BinarySok.java:19)
Почему именно так происходит, и как мне это устранить? Как я понимаю, я читаю файл как строки, а затем конвертирую их в инты, что не является незаконным.
13
3
В вашем файле должна быть пустая строка.
Возможно, вы захотите обернуть вызов parseInt в блок "try":
Или просто проверьте пустые строки перед разбором:
Обратите внимание, что при инициализации вашей индексной переменной
i
внутри цикла, она всегда равна 0. Вам следует переместить объявление перед цикломwhile
. (Или сделать его частью циклаfor
).Похоже, что Java пытается преобразовать пустую строку в число. Есть ли у вас пустая строка в конце серии чисел?
Возможно, вы можете исправить код следующим образом
Вы можете перепутать разные варианты окончания строк. В файле Windows каждая строка заканчивается возвратом каретки и переводом строки. Некоторые программы на Unix будут читать этот файл так, как будто между каждой строкой есть дополнительная пустая строка, потому что они будут воспринимать возврат каретки как конец строки, а затем воспринимать перевод строки как еще один конец строки.