题目:
在记事本中输入若干同学的姓名和成绩等信息作为原文件。编写一个Java源程序,其中的文件读写部分使用RandomAccessFile类来完成,程序实现的功能如下:
编写一个包含主方法main的公共类(访问权限为public的类),主方法main中完成的任务是:
(1)将文件中的姓名“李善”改为“王山”。
(2)在文件的最后继续添加新的学生信息。
//随机读写流
import java.io.*;
import java.util.*;
public class Test2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要处理的文件名:");
String sourse = sc.nextLine();
try {
RandomAccessFile raf = new RandomAccessFile(sourse, "rw");
long old = 0;
raf.seek(old); //seek()将文件指针定位到old
String s = raf.readLine();
while(s != null) {
//中文字符串调用getBytes()解析成字节数组,否则乱码
byte[] b = s.getBytes("ISO-8859-1");
//重构
s = new String(b);
long newu = raf.getFilePointer(); //返回从文件开始的偏移量
if(s.charAt(0)=='李' && s.charAt(1)=='善' && s.charAt(2)==' ') {
raf.seek(old); //指针定位在old后
raf.write("王山".getBytes()); //调用getBytes()解析
break;
}
old = newu;
s = raf.readLine();
}
System.out.printf("\n文件“%s”中的姓名“李善”已经改为“王山”!\n",sourse);
System.out.printf("\n请继续向文件“%s”中添加新的学生信息,以finish结束。\n\n",sourse);
raf.seek(0);
long w = raf.length();
raf.seek(w);
s = sc.nextLine();
while(!s.equals("finish")) {
raf.write(s.getBytes());
raf.write("\n".getBytes());
s = sc.nextLine();
}
} catch(IOException ioe) {
System.out.println("输入输出错误!");
}
}
}