在 Java 中显示文本文件
Displaying a text file in Java
我是 Java 编程的初学者。
我有一个文本文件,例如C:/Temp/dat.txt
。
这是我在 Main Class:
中设置的代码
public static boolean readFile(String filename) {
File file = new File(filename);
try {
Scanner scanner = new Scanner(file);
while(scanner.hasNextLine()){
String[] words = scanner.nextLine().split(",");
int id = Integer.parseInt(words[0]);
String firstName = words[1];
String lastName = words[2];
int mathMark1 = Integer.parseInt(words[3]);
int mathMark2 = Integer.parseInt(words[4]);
int mathMark3 = Integer.parseInt(words[5]);
int englishMark1 = Integer.parseInt(words[6]);
int englishMark2 = Integer.parseInt(words[7]);
int englishMark3 = Integer.parseInt(words[8]);
addStudent(id,firstName,lastName,mathMark1,mathMark2,mathMark3,englishMark1,englishMark2,englishMark3);
}
scanner.close();
} catch (FileNotFoundException e) {
System.out.println("Failed to read file");
}
return true;
}
我现在需要使用以下方法显示文本文件中的数据:
private static void displayReportByMarks() {
}
如何在此方法中从 文本文件 中获取要显示的报告,以及在此 class.
我希望这是有道理的,正如我所说,我在 Java 是一个完全的新手,无法理解这个问题。
非常感谢
阿曼达
第一个技巧是取消所有这些 static
-s 并处理 Main class 的一个对象。在 main
方法中创建一个 Main 对象。
然后还有很多没说的,如何找到学生,所以可能 sort/reorder 他们并循环遍历他们。但这无论如何都是你的功课。
大致如下。
public class Main {
private List<Student> students = new ArrayList<>();
public static void main(String[] args) {
new Main().process();
}
private void process() {
...
displayReportByMarks();
}
private void displayReportByMarks() {
Collections.sort(students, ...); // On marks.
students.sort(...); // Or this.
for (Student : students) {
...
}
}
假设您有一个 Stundent
作为标准 POJO 实现,首先实现 addStudent
方法:
private List<Student> students = new ArrayList<>();
private static void addStudent(int id, String firstName, String lastName,
int mathMark1, int mathMark2, int mathMark3,
int englishMark1, int englishMark2,
int englishMark3) {
students.add(new Student(id, firstName, lastName, mathMark1, mathMark2,
mathMark3, englishMark1, englishMark2,englishMark3));
}
然后,你可以实现打印方法:
private static void displayReportByMarks() {
List<Student> studentsByMarks = students.stream().sorted(
(s1, s2) -> //just do the comparison for sorting here
)).collect(Collectors.toList());
for (Student : students) {
// assuming you have a Student.toString() method implemeted.
System.out.println(student);
}
}
我是 Java 编程的初学者。
我有一个文本文件,例如C:/Temp/dat.txt
。
这是我在 Main Class:
中设置的代码public static boolean readFile(String filename) {
File file = new File(filename);
try {
Scanner scanner = new Scanner(file);
while(scanner.hasNextLine()){
String[] words = scanner.nextLine().split(",");
int id = Integer.parseInt(words[0]);
String firstName = words[1];
String lastName = words[2];
int mathMark1 = Integer.parseInt(words[3]);
int mathMark2 = Integer.parseInt(words[4]);
int mathMark3 = Integer.parseInt(words[5]);
int englishMark1 = Integer.parseInt(words[6]);
int englishMark2 = Integer.parseInt(words[7]);
int englishMark3 = Integer.parseInt(words[8]);
addStudent(id,firstName,lastName,mathMark1,mathMark2,mathMark3,englishMark1,englishMark2,englishMark3);
}
scanner.close();
} catch (FileNotFoundException e) {
System.out.println("Failed to read file");
}
return true;
}
我现在需要使用以下方法显示文本文件中的数据:
private static void displayReportByMarks() {
}
如何在此方法中从 文本文件 中获取要显示的报告,以及在此 class.
我希望这是有道理的,正如我所说,我在 Java 是一个完全的新手,无法理解这个问题。
非常感谢
阿曼达
第一个技巧是取消所有这些 static
-s 并处理 Main class 的一个对象。在 main
方法中创建一个 Main 对象。
然后还有很多没说的,如何找到学生,所以可能 sort/reorder 他们并循环遍历他们。但这无论如何都是你的功课。 大致如下。
public class Main {
private List<Student> students = new ArrayList<>();
public static void main(String[] args) {
new Main().process();
}
private void process() {
...
displayReportByMarks();
}
private void displayReportByMarks() {
Collections.sort(students, ...); // On marks.
students.sort(...); // Or this.
for (Student : students) {
...
}
}
假设您有一个 Stundent
作为标准 POJO 实现,首先实现 addStudent
方法:
private List<Student> students = new ArrayList<>();
private static void addStudent(int id, String firstName, String lastName,
int mathMark1, int mathMark2, int mathMark3,
int englishMark1, int englishMark2,
int englishMark3) {
students.add(new Student(id, firstName, lastName, mathMark1, mathMark2,
mathMark3, englishMark1, englishMark2,englishMark3));
}
然后,你可以实现打印方法:
private static void displayReportByMarks() {
List<Student> studentsByMarks = students.stream().sorted(
(s1, s2) -> //just do the comparison for sorting here
)).collect(Collectors.toList());
for (Student : students) {
// assuming you have a Student.toString() method implemeted.
System.out.println(student);
}
}