如何直接从文件中将项添加到Java中的ArrayList?

时间:2014-06-12 12:11:18

标签: java file arraylist

这看起来很容易但我无法做到,尽管我在C#中这样做了。 为了这个例子,我会保持简单。 我有一个Person课程,其中包含nameage字段。我有建设者,吸气者和制定者。

在我的主类中,我想从文件中读取数据并创建一个Person对象,该对象将添加到ArrayList。以下是代码中似乎无法正常工作的部分。我使用了一个调试器,看到读数是正确的,我的文本文件的每一行都在p变量的某一点,但是当我打印它时,它只显示文件中的最后一个人x次(其中x是档案中的人数)。我使用了i变量,因为我在线查看并看到.add有重载。我第一次尝试lst.add(p),第二次使用i变量来指定i希望我的人在列表中的位置。

File f = new File("fisier.txt");

    try{
        Scanner scn = new Scanner(f);
        int i = 0;
        while(scn.hasNext()){
            p.nume = scn.next();
            p.varsta = scn.nextInt();
            lst.add(i,p);
            i++;
        }
        scn.close();

    } catch(FileNotFoundException e){
        e.printStackTrace();
    }
    for(Persoana a : lst)
        System.out.println(a.nume + " " + a.varsta);
}

3 个答案:

答案 0 :(得分:7)

您需要在循环中创建Person的新实例:

while(scn.hasNext()) {
    String name = scn.next();
    int age = scn.nextInt();
    Person p = new Person(name, age);
    lst.add(p); // simply add to the end of the list
}

答案 1 :(得分:3)

每次Scanner读取新值时,您都在使用同一个对象,因此每次获取新值时都需要创建一个新的Person对象。

例如

while(scn.hasNext()){
    int age = scn.next();
    String name = scn.nextInt();
    Person p = new Person(name, age);
    lst.add(p);
 }

答案 2 :(得分:0)

while(scanner.hasNext()) 
{
  String name = scanner.next();
  int age = scanner.nextInt();
  Person person = new Person(name, age);
  list.add(person);
}

创建Person的实例。