Java 基于文件内容创建对象数组

Java 基于文件内容创建对象数组,java,arrays,arraylist,Java,Arrays,Arraylist,我有一个像这样的文本文件 列表的开头 姓名:珍妮特 年龄:21岁 生日月份:四月 列表末尾 列表的开头 姓名:彼得 年龄:34岁 生日月份:一月 列表末尾 所以我想获取信息并将其放入一个对象数组中。这是一个广泛的列表,我使用分隔符列表开头和列表结尾来分隔内容 如何将这些项目存储在对象数组中?我建议您首先创建一个类来存储信息,该类具有名称、年龄和生日月属性。重写toString()方法是一种非常好的做法,这样您就可以整洁地打印出类 然后,您可以通过将每一行拆分为一个单词数组并检查信息来检

我有一个像这样的文本文件

列表的开头

姓名:珍妮特
年龄:21岁
生日月份:四月

列表末尾

列表的开头

姓名:彼得
年龄:34岁
生日月份:一月

列表末尾

所以我想获取信息并将其放入一个对象数组中。这是一个广泛的列表,我使用分隔符
列表开头
列表结尾
来分隔内容


如何将这些项目存储在对象数组中?

我建议您首先创建一个类来存储信息,该类具有
名称
年龄
生日月
属性。重写
toString()
方法是一种非常好的做法,这样您就可以整洁地打印出类

然后,您可以通过将每一行拆分为一个单词数组并检查信息来检查每一行是否包含有关姓名、年龄或生日月份的信息

当该行显示“列表结束”时,您可以将带有参数的
class Person
添加到
ArrayList

例如,我使用“people.txt”作为文件(确保将文本文档放在包含.java文件的src文件夹之外)

Main.java

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main {

    public static void main(String[] args)
    {
        BufferedReader bufferedReader = null;
        FileReader fileReader = null;
        String name = null;
        String age = null;
        String month = null;
        List<Person> people = new ArrayList<Person>();

        try
        {
            String fileName = "people.txt";
            fileReader = new FileReader(fileName);
            bufferedReader = new BufferedReader(fileReader);
            String line = null;

            while ((line = bufferedReader.readLine()) != null)
            {
                String[] information = line.split(" ");

                if (Arrays.asList(information).contains("Name:"))
                {
                    name = information[1];
                }
                if (Arrays.asList(information).contains("Age:"))
                {
                    age = information[1];
                }
                if (Arrays.asList(information).contains("month:"))
                {
                    month = information[2];
                }
                if (line.equals("END OF LIST"))
                {
                    people.add(new Person(name, age, month));

                    name = "";
                    age = "";
                    month = "";
                }
            }

            for (Person person : people)
            {
                System.out.println(person);
                System.out.print("\n");
            }
        }
        catch (FileNotFoundException e) 
        {
            System.out.println(e.getMessage());
        } 
        catch (IOException ex) 
        {
            System.out.println("Error reading people.txt");
        }
        finally
        {
            if (bufferedReader != null)
            {
                try
                {
                    bufferedReader.close();
                }
                catch (IOException ex)
                {
                    System.out.println(ex.getMessage());
                }
            }
            if (fileReader != null)
            {
                try
                {
                    fileReader.close();
                }
                catch (IOException ex)
                {
                    System.out.println(ex.getMessage());
                }
            }
        }       
    }
}
public class Person {
    private String name;
    private String age;
    private String birthday;

    public Person(String name, String age, String birthday)
    {
        this.name = name;
        this.age = age;
        this.birthday = birthday;
    }

    @Override
    public String toString()
    {
        String information = "Name: " + name + "\nAge: " + age + "\nBirthday: " + birthday;
        return information;
    }
}

这项任务到底有什么问题?姚不知道怎么读文件吗?或者如何解析字符串?或者如何创建列表?或者如何创建模型类?我可以读取文件并创建模型类。我只需要知道如何根据“列表的开始”和“列表的结束”来区分它。将会有很多无用的信息被读取。非常感谢,你是上帝派来的@桑塔纳马克斯欢迎您!如果你认为我的答案是好的,请点击绿色复选标记接受。谢谢。只是一个简单的问题。如果“行”是空的,那么为什么我们要用空格来分割它?我如何用“列表的开头”来划界?列表之间会有很多无用的信息。@SantanaMax行在开头被设置为空,因为我们还没有读任何东西。我们读取while循环中的行,以便在启动文件操作时不为null。我给你的程序实际上忽略了列表中所有无用的信息,因为它检查行是否包含信息。好的,谢谢!对不起,我是初学者,所以我正在努力理解