RandomAccessFile这东西不好用啊~~~~你一定没仔细看writeUTF方法~~~~~~它的存储格式不是通用格式~~~~~~~先是用2个byte存储实际写出的字节数,再modified UTF-8 编码以与机器无关的方式将一个字符串写入该文件,注意:我学这个类的时候为了读出之前写入的字符串当时也失败了~~~~~后来我注意到这个类有个方法getFilePointer() 于是我每调用一次不同的write方法,输出一次偏移量结果发现。。它这个所谓的utf-8编码实际上是3个byte——至少汉字是!所以,一个字符串在RandomAccessFile中的实际存储长度为(2+3*字数)个byte你的偏移量搞对了吗?

解决方案 »

  1.   

    把写入的数据读出需要设置偏移量,这个明白。但是把数据写入到文件中时,也需要设置偏移量??之前我也看过writeUTF(),不是很懂。
      

  2.   


    JDK文档都说了是以UTF-8的编码写入了~ 我们的简体中文OS都是GBK~
    至于word文档,这个可不是普通文本~Apache POI - the Java API for Microsoft Documents
    http://poi.apache.org/
      

  3.   

    writeUTF跟readUTF相对的,如果你非要自己去读取的话,记得前2个byte是长度
      

  4.   

    这种情况遇到过。
    我的操作系统win7. 能用“纪事本”显示writeUTF写入的汉字。
    楼主要是非用RandomAccessFile的话,在写入之前记下指针(pointer).
    之后用writeUTF写入字符串。再次记住新的指针(pointer).
    seek 回到先记住的那个指针,写入两个"  ",替换掉那两个长度字节。
    seek 回到后记住的那个指针,继续。
    就不会有乱码了。
      

  5.   

    写空格的时候,不要用writeUTF("")了. 要用writeBytes("  ");
      

  6.   


    out.writeUTF("");
    out.writeUTF("");
    换成:
    writeBytes(" ");    //引号里两个空格。
      

  7.   

    我要输出的文本都是在文件尾追加,用这个RandomAccessFile很别扭, 用FileWriter比较方便。
      

  8.   

    写不会乱码,那是你读的。
    看你用什么格式读。
     找对应的utf读取的代码或工具。
    不然你就换编码吧。
      

  9.   

    我是把登陆界面中文本框中的信息写入到指定文件中,写入也要看以什么数据类型写入,不然还是会出乱码。writeBytes(" ")里面没有空格是占一个字节,有一个空格是占两个字节。我写入两个空格处了乱码,所以认为是这样理解的