RandomAccessFile流的readLine()方法在读取含有非ASCⅡ字符的文件时,比如含有汉字的文件,会出现“乱码”现象。因此,需要把readLine()读取的字符串用“iso-8859-1”编码重新编码存放到byte数组中,然后再用当前机器的默认编码将该数组转化为字符串,操作如下:
1.读取
1 | String str = in.readLine(); |
2.用“iso-8859-1”重新编码
1 | byte b[] = str.getBytes( "iso-8859-1" ); |
3.使用当前机器的默认编码将字节数组转化为字符串
1 | String content = new String(b); |
如果机器的默认编码是“GB2312”,那么
1 | String content = new String(b); |
等同于
1 | String content = new String(b, "GB2312" ); |
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程