首页 > 解决方案 > 如何在 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 语句,但这不起作用,因为我无法正确关闭编写器,导致它只接收一行然后停止。

我该如何正确地做到这一点?

标签: java

解决方案


问题不在于您如何关闭文件,而在于您如何打开文件。每次打开文件时,您都会创建一个新文件并写入一行,然后关闭它,这会覆盖之前存在的旧文件。如果文件不存在,您要做的是创建该文件,但如果它确实存在,则追加一行。

简单地改变

Files.newOutputStream(fileOut, CREATE)

Files.newOutputStream(fileOut, CREATE, APPEND)

或者,您可以在循环之外打开/关闭文件,也可以使用“尝试资源”。


推荐阅读