RandomAccessFile流的readLine()方法在读取含有非ASCⅡ字符的文件时,比如含有汉字的文件,会出现“乱码”现象。因此,需要把readLine()读取的字符串用“iso-8859-1”编码重新编码存放到byte数组中,然后再用当前机器的默认编码将该数组转化为字符串,操作如下:

1.读取

String str = in.readLine();

2.用“iso-8859-1”重新编码

byte b[] = str.getBytes("iso-8859-1");

3.使用当前机器的默认编码将字节数组转化为字符串

String content = new String(b);

如果机器的默认编码是“GB2312”,那么

String content = new String(b);

等同于

String content = new String(b,"GB2312");

例如:

import java.io.*;
public class Main {
    public static void main(String args[]) {
        RandomAccessFile in = null;
        try {
            in = new RandomAccessFile("Main.java","rw");
            long length = in.length(); //获取文件的长度
            long position = 0;
            in.seek(position); //将读取位置定位到文件的起始
            while(position<length) {
                String str = in.readLine();
                byte b[] = str.getBytes("iso-8859-1");
                str = new String(b);
                position = in.getFilePointer();
                System.out.println(str);
            }
        }
        catch(IOException e) {}
    }
}


点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)