java randomAccessFile用每个字符之间的空格写每个东西

时间:2012-02-24 13:20:09

标签: java file-io io

我使用此函数在特定索引中写入一行:

 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 个答案:

答案 0 :(得分:3)

它的行为完全符合记录:

writeChars的文档:

  

将字符串作为字符序列写入文件。每个字符都写入数据输出流,就像writeChar方法一样。写操作从文件指针的当前位置开始。

writeChar的文档:

  

将char作为双字节值写入文件,首先是高字节。写操作从文件指针的当前位置开始。

你真的需要RandomAccessFile吗?没有使用FileOutputStream包裹OutputStreamWriter使用您想要的任何编码的原因?有什么办法可以避免在这样的任意位置写数据吗?

可以使用writeBytes代替writeChars - 这基本上只会写 ISO-8859-1字符 - 这样就足够了为了你?虽然......它不会保留非ISO-8859-1数据。