Java踩坑系列(二):RandomAccessFile中readLine()乱码问题
在使用RandomAccessFile时,通过将readLine()方法返回的String类型的字符串打印到控制台上出现的是一些乱码。
例如,读取“你好,世界!”这一行:
读取这一行的方法部分代码如下
System.out.println(raFile.readLine());
会出现这样的输出结果:![]()
显然,这与我们要的结果是不一致的。
解决方法:
readLine()方法可以从该文件的当前文件指针处成功地读取字节,直到到达行结束符或文件的末尾。每个字节都转换为一个字符,方法是采用该字符的低八位字节值,并将该字符的高八位设置为零。因此,此方法不支持完整的 Unicode 字符集。
再通过查阅一些资料发现,使用 RandomAccessFile对象方法的 readLine() 都会将编码格式转换成 ISO-8859-1。因此我们需要进行一次转码。
System.out.println(new String(raFile.readLine().getBytes("ISO-8859-1"),"utf-8"));
这样最后输出的结果是正确的。
整段程序代码如下:
import java.io.IOException; import java.io.RandomAccessFile; public class Test { public static void main(String[] args) throws IOException { RandomAccessFile raFile = new RandomAccessFile("Readme.txt","rw"); String line1 = "Hello World!\n"; String line2 = "你好,世界!\n"; //输入两行文本 raFile.write(line1.getBytes()); raFile.write(line2.getBytes()); //将文件指针指向第二行开始处,然后读取第二行的内容,并输出到控制台 raFile.seek(line1.getBytes().length); //System.out.println(raFile.getFilePointer()); System.out.println(new String(raFile.readLine().getBytes("ISO-8859-1"),"utf-8"));//解决乱码 raFile.close(); } }

浙公网安备 33010602011771号