Java的。需要两次读取文件

时间:2012-11-23 21:35:04

标签: java

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

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");
}

3 个答案:

答案 0 :(得分:3)

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

使用

代替似乎具有固定大小数组的ArrayStudent
 List<Student> students

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

使用

初始化
students= new ArrayList<Student>();

并使用

将学生添加到列表中
students.add(new Student(name, age));

答案 1 :(得分:0)

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

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

答案 2 :(得分: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));