所谓动态读取,是指从文件的任意位置开始访问文件,而不是必须从文件开始位置读取到文件末尾。动态读取需要用到Java中的Random AccessFile类,该类中有一个文件指针用于标识当前流的读写位置,这个指针可以向前或者向后移动。
Random AccessFile类的构造方法有如下两种重载形式:
(1)Random AccessFile(File file,String mode):访问参数file指定的文件,访问形式由参数mode指定,mode参数有两个常用的可选值r和rw,其中r表示只读,rw 表示读写。
(2)Random AccessFile(String name,String mode):访问参数name指定的文件,mode参数的含义同上。
Random AccessFile类中还提供了一系列读取和写入数据的方法,表7-2列举了其中一些常用方法。
表7-2 RandomAccessFile类的常用方法
【例7-5】 编写一个程序,使用File类创建一个words.txt文件,然后写入一个长中文字符串,再从第4个字节开始读取并输出。代码如下所示:
(www.xing528.com)
(1)第11行代码创建一个File类对象。在main()方法中创建位于D:\words.txt的File对象。
(2)第16行代码创建Random AccessFile对象,以读写方式操作File对象。定义一个要写入的字符串,再将其进行格式的转换。这样是为了使其写入文件的内容不出现乱码,再将转换后的内容写入文件。
(3)打印出当前指针的位置,然后将其移动到第4个字节。然后定义一个长度为2 的byte数组,接下来开始进行内容的循环读取,将读出的内容以字符串的形式输出到控制台。
(4)运行程序,程序运行结果如下所示,显示了写入字符串后指针的位置,以及从文件开关跳过6个字节后读取到的字符串。写入文件中的字符串内容如图7-1所示。
对比输出结果和图7-1发现,中文字符串已成功写入记事本中,但是读出的字符串内容少了两个字和一个逗号,这是由于使用Random AccessFile的seek()方法跳过了前6字节(1个汉字占两字节)。在本程序中将中文字符串进行了编码转换,然后写入文件。读取时调用的是带有3个参数的read()方法将记事本中的内容读取出来。
图7-1 words.txt文件内容
注意:要写进文本的内容是中文,如果不进行字符的转换,写进去的会是乱码,读取出来的内容也会是乱码。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。