RandomAccessFile这东西不好用啊~~~~你一定没仔细看writeUTF方法~~~~~~它的存储格式不是通用格式~~~~~~~先是用2个byte存储实际写出的字节数,再modified UTF-8 编码以与机器无关的方式将一个字符串写入该文件,注意:我学这个类的时候为了读出之前写入的字符串当时也失败了~~~~~后来我注意到这个类有个方法getFilePointer() 于是我每调用一次不同的write方法,输出一次偏移量结果发现。。它这个所谓的utf-8编码实际上是3个byte——至少汉字是!所以,一个字符串在RandomAccessFile中的实际存储长度为(2+3*字数)个byte你的偏移量搞对了吗?
JDK文档都说了是以UTF-8的编码写入了~ 我们的简体中文OS都是GBK~
至于word文档,这个可不是普通文本~Apache POI - the Java API for Microsoft Documents
http://poi.apache.org/
我的操作系统win7. 能用“纪事本”显示writeUTF写入的汉字。
楼主要是非用RandomAccessFile的话,在写入之前记下指针(pointer).
之后用writeUTF写入字符串。再次记住新的指针(pointer).
seek 回到先记住的那个指针,写入两个" ",替换掉那两个长度字节。
seek 回到后记住的那个指针,继续。
就不会有乱码了。
out.writeUTF("");
out.writeUTF("");
换成:
writeBytes(" "); //引号里两个空格。
看你用什么格式读。
找对应的utf读取的代码或工具。
不然你就换编码吧。