Почему мой BufferedReader читает текст, который не завершается в данном файле?

1

Я использую 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)

Исключение, как вы можете видеть, вызывается из-за символов ï"¿ которые появляются, когда буферизованный читатель читает из файла (даже если они не существуют в файле). Если кто-нибудь может помочь мне понять, откуда эти персонажи и почему они появляются, это было бы здорово!

  • 0
    Убедитесь, что вы правильно поняли кодировку.
  • 0
    Выглядит как заголовок BOM (Byte Order Mark). Три не поддерживает спецификацию в Java. Вам нужно удалить первые 4 укуса из потока. Скажи спасибо Microsoft
Показать ещё 1 комментарий
Теги:
string
bufferedreader
byte

3 ответа

3
Лучший ответ

Что вы видите, это спецификация UTF-8

Преобразуйте свой входной файл без спецификации.

  • 0
    Как бы я поступил так?
  • 0
    Notepad ++ предлагает конвертировать файл в UTF-8 без спецификации
0
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();
0

белые пробелы могут вызвать эту ошибку. попробуйте trim() строку ввода во время чтения строки,

как,

line = bufferedReader.readLine().trim();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню