从文件中读取学生记录

时间:2017-05-04 05:19:13

标签: java

我正在尝试阅读包含学生记录(名字,姓氏和成绩)的文件。 我编写了一个简单的代码来完成此任务,但是从文本文件中读取两行后代码失败了。这是我的代码:

public class Student {
private final  String first,last;
final int MAXGRADE = 100; 
final int LOWGRADE = 0; 
private final int grade;

public Student(String firstname,String lastname, int grade){
    this.first = firstname;
    this.last = lastname;
    this.grade = grade;

}
@Override
public String toString(){
    return first + " " + last + "\t" + grade;
}
}

并且驱动程序具有此代码

public class driver {
public static void main(String[] args) throws FileNotFoundException {
   String first_name ,last_name;
    int grade;
    Scanner fileInput = new Scanner(new File("data1.txt"));
    while (fileInput.hasNextLine())
    {
        first_name = fileInput.next();
        last_name = fileInput.next();
        grade = fileInput.nextInt();

        Student st = new Student(first_name, last_name,grade);

      System.out.println(st);

    }
}
}

编译器指向此

grade = fileInput.nextInt();

作为错误的来源。

3 个答案:

答案 0 :(得分:1)

这段代码对我有用。确定

  1. 正确给出了文本文件的位置,
  2. 每行第3个位置给出的整数值(如: - 史蒂夫史密斯22)

答案 1 :(得分:0)

从您发布的评论“ @AxelH每行代表一个学生的姓名和成绩”我们可以看到问题。

你读取一行的实际循环

while (fileInput.hasNextLine())
{
    first_name = fileInput.next();
    last_name = fileInput.next();
    grade = fileInput.nextInt();

    Student st = new Student(first_name, last_name,grade);

  System.out.println(st);

}

正在阅读3行,每fileInput.nextXXX();一行。你需要做的是

  • 读取一行String:`String line = fileInput.nextLine();
  • 在分隔符上拆分该行:`String [] data = line.split(“”); //或者你的分隔符,如果不是空格(小心一些名字......)
  • 设置此数组的值(解析需要整数)

编辑:

我犯了一个错误,因为我习惯使用nextline而不是next,我无法删除答案,因为它被接受所以我会更新它以更正确而不更改内容。

代码确实是正确的,next将采用以下输入直到下一个分隔符\\p{}javaWhitespace}+,但使用给定的解决方案将为您提供更多解决方案来管理组合名称Katrina Del Rio 3 .canvas svg {position:absolute; top:0; left:0; width:860px; height:860px; overflow: hidden;} 1}}。

答案 2 :(得分:0)

如果您使用 Java 8 ,那么执行此操作的功能方式是:

String filePath = "C:/downloads/stud_records.txt"; // your file path
        /*
         * Gives you a list of all students form the file
         */
        List<Student> allStudentsFromFile = Files.lines(Paths.get(filePath)).map(line -> {
            String[] data = line.split("\\s+"); //Split on your delimiter
            Student stud = new Student(data[0], data[1], Integer.parseInt(data[2]));
            return stud;
        }).collect(Collectors.toList());

注意:我已经假设这个:

  

FirstName LastName等级

是输入文件格式。