我有一个看起来像这样的文本文件。
列表开头
姓名:珍妮特
年龄:21岁 生日月:4月
清单结束
列表开始
姓名:彼得 年龄:34岁 生日月:1月
列表结尾
所以我想获取信息并将其放入对象数组中。这是一个广泛的列表,我使用分隔符beginning of list
和end of list
来分隔内容。
如何将这些项目存储在对象数组中?
答案 0 :(得分:2)
我建议您首先使用name
,age
和birthday month
属性创建一个用于存储信息的类。覆盖toString()
方法是一种非常好的做法,因此您可以整齐地打印出类。
然后,您可以检查每一行是否包含有关姓名,年龄或生日月份的信息,方法是将每行分成一个单词数组,然后检查信息。
一旦该行显示" END OF LIST",您可以将class Person
参数添加到ArrayList
。
对于示例,我使用" people.txt" 作为文件(确保将文本文档放在 src 文件夹之外,其中包含你的.java文件)。
<强> 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());
}
}
}
}
}
<强> Person.java 强>
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;
}
}