Я использую BufferedReader
для чтения деталей из файла, которые хранятся в виде байтов, затем я преобразовываю bytes
в текст и разбиваю его на array
. Однако моя программа возвращает NumberFormatException
из текста, считанного из файла. Ниже я предоставил свой код, сообщение об ошибке, строку, считанную из файла, и оператор печати, используемый для отображения того, что BufferedReader
прочитал из файла.
FileReader fileReader = new FileReader("VirtualATM.txt");
BufferedReader bufferedReader = new BufferedReader(fileReader);
line = bufferedReader.readLine();
System.out.println(line);
String line = line.substring(1, line.length()-1); //Convert bytes read back to String
StringBuilder sb = new StringBuilder();
for(String s: line.split(", ")) //Split every byte on ,
sb.append((char) Integer.parseInt(s)); //Convert byte to char
String text = sb.toString(); //Convert StringBuilder to String
String [] cardNum = text.split("\\s+"); //Split line read from file on every blank space into an array
Строка в текстовом файле, который читается:
[78, 97, 109, 101, 32, 116, 101, 115, 116, 32, 99, 97, 114, 100, 78, 111, 32, 54, 55, 56, 56, 55, 53, 55, 49, 57, 32, 67, 117, 114, 114, 101, 110, 116, 32, 66, 97, 108, 97, 110, 99, 101, 32, 51, 55, 48, 32, 111, 118, 101, 114, 100, 114, 97, 102, 116, 32, 102, 97, 108, 115, 101, 32, 111, 118, 101, 114, 68, 114, 97, 102, 116, 76, 105, 109, 105, 116, 32, 48, 32, 112, 105, 110, 32, 50, 53, 50, 53]
Строка из инструкции печати - System.out.println(line)
:
ï"¿[78, 97, 109, 101, 32, 116, 101, 115, 116, 32, 99, 97, 114, 100, 78, 111, 32, 54, 55, 56, 56, 55, 53, 55, 49, 57, 32, 67, 117, 114, 114, 101, 110, 116, 32, 6 6, 97, 108, 97, 110, 99, 101, 32, 51, 55, 48, 32, 111, 118, 101, 114, 100, 114, 97, 102, 116, 32, 102, 97, 108, 115, 101, 32, 111, 118, 101, 114, 68, 114, 97, 1 02, 116, 76, 105, 109, 105, 116, 32, 48, 32, 112, 105, 110, 32, 50, 53, 50, 53]
Исключение:
Exception in thread "main" java.lang.NumberFormatException: For input string: "»¿[78"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
Исключение, как вы можете видеть, вызывается из-за символов ï"¿
которые появляются, когда буферизованный читатель читает из файла (даже если они не существуют в файле). Если кто-нибудь может помочь мне понять, откуда эти персонажи и почему они появляются, это было бы здорово!
Что вы видите, это спецификация UTF-8
Преобразуйте свой входной файл без спецификации.
Follow this code:
String lineFromFile = bufferedReader.readLine();
// strip out the '[' and ']'
lineFromFile = lineFromFile.substring(1, lineFromFile.length()-1);
StringBuilder sb = new StringBuilder();
for(String s: lineFromFile.split(", "))
sb.append((char) Integer.parseInt(s));
String text = sb.toString();
белые пробелы могут вызвать эту ошибку. попробуйте trim()
строку ввода во время чтения строки,
как,
line = bufferedReader.readLine().trim();