题目:
编写一个Java源程序,其中包含编写一个包含主方法main的公共类(访问权限为public的类),主方法main中完成的任务是:
(1)从键盘上输入两个文件的路径名及其文件名。
(2)从键盘上输入若干学生的信息(姓名,数学成绩,计算机成绩,各项之间用空格隔开),以finish结束,将这些学生的信息写入第一个文件。
(3)将第一个文件作为输入流的源,找出姓“张”的学生,将他们的信息写入第二个文件。
思路分析:
-
通过键盘输入获取用户输入的文件路径和文件名,分别存储为firstFilePath和secondFilePath。
-
创建一个FileWriter对象(firstFileWriter),用于将学生信息写入第一个文件。
-
使用BufferedReader从键盘上获取用户输入的学生信息。使用while循环,判断每一行输入的内容是否为"finish",如果不是,则将学生信息写入第一个文件。
-
关闭第一个文件的输出流。
-
再次通过键盘输入获取第二个文件的路径和文件名。
-
创建一个FileWriter对象(secondFileWriter),用于将姓“张”的学生信息写入第二个文件。
-
使用BufferedReader读取第一个文件的内容,使用while循环逐行读取,直到读取到null为止。
-
对于每一行数据,使用split方法按空格分割成姓名、数学成绩和计算机成绩的数组。
-
判断姓名是否以"张"开头,如果是,则将该行学生信息写入第二个文件。
-
关闭第二个文件的输出流和第一个文件的输入流。
-
输出"操作完成!"的提示信息。
代码:
import java.io.*;
public class FileOperations {
public static void main(String[] args) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
// 输入第一个文件路径和文件名
System.out.print("请输入第一个文件的路径和文件名:");
String firstFilePath = reader.readLine();
FileWriter firstFileWriter = new FileWriter(firstFilePath);
// 输入学生信息并写入第一个文件
System.out.println("请输入学生信息(姓名 数学成绩 计算机成绩),以finish结束:");
String studentInfo;
while (!(studentInfo = reader.readLine()).equalsIgnoreCase("finish")) {
firstFileWriter.write(studentInfo + "\n");
}
firstFileWriter.close();
// 输入第二个文件路径和文件名
System.out.print("请输入第二个文件的路径和文件名:");
String secondFilePath = reader.readLine();
FileWriter secondFileWriter = new FileWriter(secondFilePath);
// 从第一个文件中读取姓“张”的学生信息,并写入第二个文件
BufferedReader firstFileReader = new BufferedReader(new FileReader(firstFilePath));
String line;
while ((line = firstFileReader.readLine()) != null) {
String[] studentData = line.split(" ");
if (studentData[0].startsWith("张")) {
secondFileWriter.write(line + "\n");
}
}
secondFileWriter.close();
firstFileReader.close();
System.out.println("操作完成!");
} catch (IOException e) {
e.printStackTrace();
}
}
}