0

我是编程界的新手,现在我正在编写一个简单的代码来读取每行存储学生姓名和年龄的文本文件。出于某种原因,我需要读取该文件两次,所以我想问有没有比这更简单的方法?

File inputFile = new File("students.txt");

try {
    Scanner in = new Scanner (inputFile);

    // count how many lines are in the file
    while (in.hasNext())
    {
        in.nextLine();
        count++;
    } 

    in.close();
} catch (FileNotFoundException e) {
    System.out.println ("Check your file mate");
}

ArrayStudent s = new ArrayStudent(count);

try {
    Scanner in2 = new Scanner (inputFile);

    while (in2.hasNext())
    {
        String name = in2.next();
        int age = in2.nextInt();
        s.insertStudent(new Student (name, age));
    } 

    in2.close();
} catch (FileNotFoundException e) {
    System.out.println ("Check your file mate");
}
4

3 回答 3

3

有一种更简单的方法,您只需读取一次文件

而不是 ArrayStudent 似乎有一个固定大小的数组,使用

 List<Student> students

ArrayList 在您添加元素时自动增长。

你初始化

students= new ArrayList<Student>();

并将学生添加到列表中

students.add(new Student(name, age));
于 2012-11-23T21:40:57.783 回答
0

首先,您不应该复制和粘贴您的代码。改用函数(方法)。您可以创建自己的方法来打开文件并返回一个Scanner实例。在这种情况下,您不会创建重复的代码。

其次,Scanner具有接受输入流的构造函数。您可以在输入流上使用mark()和(请参阅 参考资料)从文件开头开始读取。reset()FileInputStream

于 2012-11-23T21:41:29.787 回答
0

您根本不需要读取文件两次。我假设你的ArrayStudent类包含一个Student[]数组。相反,您应该使用可动态调整大小的数据结构,例如ArrayList.

使用ArrayList,您无需事先了解要添加多少元素;它会在幕后自动增加其大小。

这是它的用法示例:

List<Student> students = new ArrayList<Student>();
students.add(new Student(name1, age1));
students.add(new Student(name2, age2));
students.add(new Student(name3, age3));
于 2012-11-23T21:43:35.817 回答