如何在Java中将用户输入排序为文本文件?
我有一个程序接受用户输入并将学生设置在文本文件中,我想使用平均成绩将这些学生分类到单独的文本文件中如何在Java中将用户输入排序为文本文件?,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) {
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());
}
}
}
导入java.nio.file.*;
导入java.io.*;
导入静态java.nio.file.StandardOpenOption.*;
导入java.util.Scanner;
公共类NewClass2
{
公共静态void main(字符串[]args)
{
字符串重新计数=”;
字符串分隔符=“,”;
扫描仪输入=新扫描仪(System.in);
最终int QUIT=999;
NewClass1 student=newnewclass1();
尝试
{
System.out.println(“输入学生ID:”);
student.setStudentId(input.nextInt());
while(student.getStudentId()!=退出)
{
System.out.println(“输入学生姓氏:”);
student.setLastName(input.next());
System.out.println(“输入学生的名字:”);
student.setFirstName(input.next());
System.out.println(“输入学生分数:”);
student.setGradePoint(input.nextDouble());
如果(student.getGradePoint()>=3.6)
{
Path fileOut=Path.get(“HonorsStudentList.txt”);
OutputStream output=new BufferedOutputStream(Files.newOutputStream(fileOut,CREATE));
BufferedWriter writer=新的BufferedWriter(新的OutputStreamWriter(输出));
recont=student.getStudentId()+分隔符+student.getLastName()+分隔符+student.getFirstName()+分隔符+student.getGradePoint();
writer.write(重新计数,0,重新计数.length());
writer.newLine();
writer.close();
}
如果(student.getGradePoint()=2.0)
{
Path fileOut=Path.get(“GoodStandingStudentList.txt”);
OutputStream output=new BufferedOutputStream(Files.newOutputStream(fileOut,CREATE));
BufferedWriter writer=新的BufferedWriter(新的OutputStreamWriter(输出));
recont=student.getStudentId()+分隔符+student.getLastName()+分隔符+student.getFirstName()+分隔符+student.getGradePoint();
writer.write(重新计数,0,重新计数.length());
writer.newLine();
writer.close();
}
if(student.getGradePoint()问题不在于如何关闭文件,而在于如何打开文件。每次打开文件时,您都在创建一个新文件并写入一行,然后关闭它,这将覆盖以前存在的旧文件。如果文件不存在,您要做的是创建该文件,但如果它确实存在,请附加一行。 简单地改变
Files.newOutputStream(fileOut, CREATE)
到
或者,您可以在循环之外打开/关闭文件,或者也可以使用“尝试使用资源”。因为这只有三个文件,所以在开始时一次打开所有三个写入程序并将其保持打开状态直到结束可能是最简单的方法 如果不想手动关闭编写器(至少我认为是Java7或Java8),可以使用语句
顺便说一句,您可能不需要将输出流包装在BufferedOutputStream中,因为您已经使用了缓冲写入器。与其每次都在文件中写入,不如尝试制作三个列表(一个用于您需要的每个年级范围),当您没有其他学生时,将它们写入单独的文件。 大概是这样的:
List<Student> honorsStudent = new ArrayList<Student>();
List<Student> goodStandingStudent = new ArrayList<Student>();
List<Student> probationStudent = new ArrayList<Student>();
// ....
if (student.getGrade() >= 3.6) {
honorsStudent.add(student);
} else if (student.getGrade() >= 2) {
goodStandingStudent.add(student);
}
else {
probationStudent.add(student);
}
//while loop end
//write your files
List honorsStudent=new ArrayList();
List goodStandingStudent=new ArrayList();
List PeritationStudent=new ArrayList();
// ....
如果(student.getGrade()>=3.6){
荣誉学生。添加(学生);
}else if(student.getGrade()>=2){
良好标准学生。添加(学生);
}
否则{
试用学生。添加(学生);
}
//while循环结束
//写你的文件
List<Student> honorsStudent = new ArrayList<Student>();
List<Student> goodStandingStudent = new ArrayList<Student>();
List<Student> probationStudent = new ArrayList<Student>();
// ....
if (student.getGrade() >= 3.6) {
honorsStudent.add(student);
} else if (student.getGrade() >= 2) {
goodStandingStudent.add(student);
}
else {
probationStudent.add(student);
}
//while loop end
//write your files