java - 如何在 Java 中对用户输入的文本文件进行排序?
问题描述
我有一个程序接受用户输入并将学生设置在文本文件中,我想使用平均成绩将这些学生排序在单独的文本文件中
import java.nio.file.*;
import java.io.*;
import static java.nio.file.StandardOpenOption.*;
import java.util.Scanner;
public class NewClass2
{
public static void main(String[] args)
{
String recOut = "";
String delimiter = ",";
Scanner input = new Scanner(System.in);
final int QUIT = 999;
NewClass1 student = new NewClass1();
try
{
System.out.println("Enter Student ID: ");
student.setStudentId(input.nextInt());
while(student.getStudentId() != QUIT)
{
System.out.println("Enter Student Last Name: ");
student.setLastName(input.next());
System.out.println("Enter Student First Name: ");
student.setFirstName(input.next());
System.out.println("Enter Student Grade Point: ");
student.setGradePoint(input.nextDouble());
if(student.getGradePoint()>=3.6)
{
Path fileOut = Paths.get("HonorsStudentList.txt");
OutputStream output = new BufferedOutputStream(Files.newOutputStream(fileOut, CREATE));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output));
recOut = student.getStudentId() + delimiter + student.getLastName() + delimiter + student.getFirstName() + delimiter + student.getGradePoint();
writer.write(recOut, 0,recOut.length());
writer.newLine();
writer.close();
}
if(student.getGradePoint()<3.6 && student.getGradePoint()>=2.0)
{
Path fileOut = Paths.get("GoodStandingStudentList.txt");
OutputStream output = new BufferedOutputStream(Files.newOutputStream(fileOut, CREATE));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output));
recOut = student.getStudentId() + delimiter + student.getLastName() + delimiter + student.getFirstName() + delimiter + student.getGradePoint();
writer.write(recOut, 0,recOut.length());
writer.newLine();
writer.close();
}
if(student.getGradePoint()<2.0)
{
Path fileOut = Paths.get("ProbationStudentList.txt");
OutputStream output = new BufferedOutputStream(Files.newOutputStream(fileOut, CREATE));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output));
recOut = student.getStudentId() + delimiter
+ student.getLastName() + delimiter
+ student.getFirstName() + delimiter
+ student.getGradePoint();
writer.write(recOut, 0,recOut.length());
writer.newLine();
writer.close();
}
System.out.println("Enter Student ID: ");
student.setStudentId(input.nextInt());
}
}
catch(Exception e)
{
System.out.println("<<Something bad happened!>>");
System.out.println(e.getMessage());
}
}
}
我一直在尝试使用 if 语句,但这不起作用,因为我无法正确关闭编写器,导致它只接收一行然后停止。
我该如何正确地做到这一点?
解决方案
问题不在于您如何关闭文件,而在于您如何打开文件。每次打开文件时,您都会创建一个新文件并写入一行,然后关闭它,这会覆盖之前存在的旧文件。如果文件不存在,您要做的是创建该文件,但如果它确实存在,则追加一行。
简单地改变
Files.newOutputStream(fileOut, CREATE)
到
Files.newOutputStream(fileOut, CREATE, APPEND)
或者,您可以在循环之外打开/关闭文件,也可以使用“尝试资源”。
推荐阅读
- java - 此错误的解决方案是什么:错误 - 原始错误产生 ENOTDIR?
- date - 如何将字符串转换为时间戳到bigquery
- ios - 架构 x86_64 的未定义符号:“_OBJC_CLASS_$_GNSMessageManager”- Flutter 应用中 iOS 的 NearBy 本机开发
- java - 如何从android将新节点放入firebase
- vim - Vim - 当 foucs 从 vim/nvim 丢失时保存缓冲区。与 VSCode 的 "files.autoSave": "onFocusChange" 设置相同
- npm - npmrc - 冻结锁定文件?
- python - NumPy 如何将复数矩阵相乘?
- java - Java 新手,需要帮助将文本字段中的元素存储到自定义类型对象中并将对象存储到 ArrayList 中
- javascript - 尝试根据带有按钮的标题/描述按字母顺序对挑战进行排序
- php - 在获取的 URL 中查找单词时 PHP PREG 匹配错误