java randomAccessFile написать каждую вещь с пробелом между каждым символом - PullRequest
1 голос
/ 24 февраля 2012

Я использовал эту функцию, чтобы написать строку в определенном индексе:

 private void write_line(Student s,int index){
        try {
            Student_pool.seek(0);
           Student_pool.seek(index*(25*Integer.SIZE+4*Character.SIZE));
            Student_pool.writeChars(s.getId());
            Student_pool.writeChars(s.getHw().substring(0,2));
            Student_pool.writeChars(".");
            Student_pool.writeChars(s.getHw().substring(3,5));
            Student_pool.writeChars(s.getPrj().substring(0,2));
            Student_pool.writeChars(".");
            Student_pool.writeChars(s.getPrj().substring(3,5));
            Student_pool.writeChars(s.getMidtermExam().substring(0,2));
            Student_pool.writeChars(".");
            Student_pool.writeChars(s.getMidtermExam().substring(3,5));
            Student_pool.writeChars(s.getFinalExam().substring(0,2));
            Student_pool.writeChars(".");
            Student_pool.writeChars(s.getFinalExam().substring(3,5));
            Student_pool.writeChars("\n");
            Student_pool.getFD().sync();
        } catch (IOException ex) {
            Logger.getLogger(Storagelmpl.class.getName()).log(Level.SEVERE, null, ex);
        }
        }

Но когда я пытаюсь открыть файл, результат получается неправильным, и после каждого символа появляется пробел.Результат выглядит следующим образом:

 8 1 0 1 8 7 3 1 2 2 0 . 0 0 2 0 . 0 0 2 0 . 0 0 2 0 . 0 0 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 8 1 0 1 8 8 2 7 5 1 6 . 0 0 1 0 . 0 0 1 3 . 0 0 1 9 . 0 0 

Я думаю, что есть проблема с моим кодированием и другая проблема с моим операндом поиска.Но я не знаю, как это исправить.

1 Ответ

3 голосов
/ 24 февраля 2012

Он ведет себя точно так, как задокументировано:

Документы для writeChars:

Записывает строку в файл в виде последовательности символов.Каждый символ записывается в поток вывода данных как будто методом writeChar.Запись начинается с текущей позиции указателя файла.

Документы для writeChar:

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

Вам вообще нужен RandomAccessFile вообще?Есть ли причина не использовать FileOutputStream в OutputStreamWriter, используя ту кодировку, которая вам нужна?Можно ли как-нибудь избежать записи данных в произвольные позиции, подобные этой?

Вы могли бы использовать writeBytes вместо writeChars - что в основном будет писать просто ISO-8859-1 символов - это будет достаточно для вас?Это не собирается сохранять данные не-ISO-8859-1, хотя ...

...