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) {} } }
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程