JAVA的IO类为了方便我们输入输出那些基本的数据类型,基本上在各种的IO类里都提供了针对专门各种的基本数据类型的读写方法,这些方法其实是已经封装了那些转换代码了,如:readInt writeInt 等,但似乎就是没有提供读写STRING类型的方法,原因是JAVA提供了专门读写文本字符的IO类,如:reader writer这两个抽像基类,以及由其派生出来的子类都是专门用来读写文本字符的。因此,如果你要读取文本文件的都话就不要去用inputstrem outStrem这一系列的IO类了,而要使用reader writer 这系列的类了,因为它们不是针对文本的,如果非要用不可的话,你就要在程序中设定专门的程序代码来做这些字符的转换了。如下代码所示:
RandomAccessFile ra=new RandomAccessFile("c://1.txt","rw"); //RandomAccessFile类不支持字符的直接读写的
String s=new String("hello world");
ra.write(s.getBytes()); //将String转换成字节类型
byte buf[]=new byte[1024]; //定义一个字节数组用以接收读取到的字节数据
raf.read(buf,0,512); //RandomAccessFile类不支持字符的直接读取
System.out.println("name:"+new String(buf)); //将读取出来的字节数据转换成String并输出。
这里还有一个问题,那就是字符编码的问题,在JAVA虚拟机上字符是以UNICODE的格式来表示的,而我们的机器则是以本地机字符集对字符编码的,所以存在同一个字符有两种不同的表示,因此,当我们想以GB2312也就是简体中文的格式来把这些字符保存在文件上,并以简体中文的格式在显示器(输出流)上显示这些字符,那么我们只得先将UNICODE格式的String转换成GB2312格式的字符编码即s.getBytes(),其实这个方法的作用是用本地的字符编码将UNICODE格式的字符编码转换成GB2312的编码,除非你的机器本地编码是采用UNICODE格式,否则这样的转换是免不了的,即使采用包装类也只是用方法来把这个转换过程隐藏了。JAVA采用UNICODE来做为JVM的字符编码,是因为UNICODE是全球的统一标准,有助于JAVA 的跨平台实现,但无奈现实中还是有很多系统仍然采用各自国家的字符编码,因此JAVA不得不提供一种方法来进行UNICODE与当地字符编码的转换。