RandomAccessFile, конвертирующий int в китайский - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь прочитать некоторые объекты книги, которые я сохранил в текстовом файле. Когда я запускаю код, он запускается, но возвращает неверную информацию.

Ожидаемый результат: Книга isbn = 225346873945, цена = 12,99, год издания = 2015, название = «сбор за поиск»

Фактический результат: Книга isbn = ⸹ 㔬 ⁹ 敡 牐 畢 汩 獨 敤 〬⁴ 〬⁴ price, цена = 9.770698273454668E199, год Издано = 1633907817, название = 捥  映 瑨 攠 坩 ❽਀ 䵂 䵂 潯 㤴 ㈵㌴ 㘸 㘸 㘸 㘸 㘸 㘸 㘸 㘸 㘸 㘸 㘸 㘸 㘸 㘸 㘸 㘸 㘸 㘸 㘸 㘸 㘸 㘸 㘸 㘸 㘸 㘸 㘸 㘸 㘸 㘸 㘸 㘸 㘸 㘸 㘸 㘸 㜳 㜳 㜳 㜳 㜳 㜳 㜳 㜳 㜳 㜳 㜳 㜳 㜳 㜳 㜳 㜳 㜳 㜳 㜳 㜳 㜳 㜳 㜳⁰ 物 捥 㴱 ㈮ 㤹 Ⱐ 祥 慲 '

Информация в текстовом файле верна, но когда она отображается в консоли, она неверна. Как можно исправить этот код, игнорируя недопустимый цикл while?

    try {
        bookFile.seek(0);
        for (Book bookObj : bookList) {
            String tempBook = bookObj.toString();
            bookFile.writeBytes(tempBook);
            bookFile.writeBytes(System.getProperty("line.separator"));
        }
    } catch (IOException e) {
        System.out.println("Error writing to " + BOOK_LIST_FILE);
    } catch (Exception e) {
        System.out.println("Generic error" + e);
    }


try{
        Book tempBook = new Book();
        bookFile.seek(0);
        while (true) {
            readData(bookFile, tempBook);
            System.out.println(tempBook.toString());
        }
    } catch (IOException e){
        System.out.println("IO Error " + e);
    } catch (Exception e) {
        System.out.println("Error " + e.getMessage());
    }
}

public static void readData( RandomAccessFile bookFile, Book book) throws IOException, EOFException, Exception
{
    StringBuffer sb = new StringBuffer();

    for (int i=0; i<book.getISBN_LENGTH(); i++){
        sb.append(bookFile.readChar());
    }

    book.setIsbn(sb.toString());

    book.setPrice(bookFile.readDouble());

    book.setYearPublished(bookFile.readInt());

    sb.setLength(0);

    for (int i = 0; i <book.TITLE_LENGTH ; i++) {
        sb.append(bookFile.readChar());
    }

    book.setTitle(sb.toString());

}

1 Ответ

0 голосов
/ 01 мая 2018

readInt() и друзья для двоичных данных. Ваш файл текстовый. Вы должны просто прочитать байты из этого файла. RandomAccessFile - плохой выбор: используйте BufferedReader над InputStreamReader над FileInputStream и метод readLine().

...