Java 需要帮助将文本文件读入对象吗
我创建了一个Person类,参数有firstname、lastname和year。我需要弄清楚如何从文本文件中读取输入并创建一个人员数组。以下是我正在尝试的,基于我从网上收集的不同来源Java 需要帮助将文本文件读入对象吗,java,Java,我创建了一个Person类,参数有firstname、lastname和year。我需要弄清楚如何从文本文件中读取输入并创建一个人员数组。以下是我正在尝试的,基于我从网上收集的不同来源 String name = "People.txt"; Person[] people = new ArrayList<Person>(); BufferedReader br = new BufferedReader(new FileReader(name));
String name = "People.txt";
Person[] people = new ArrayList<Person>();
BufferedReader br = new BufferedReader(new FileReader(name));
String line = br.readLine();
while(line != null)
{
people.add(line);
line = br.readLine();
}
好吧,亲爱的。你们真是太棒了,也许我今晚可以睡觉了。我已经连续两天试图完成这件事,开始产生幻觉。我遇到的最后一个问题,我确信它很简单,但我得到了这个错误
SortingImplementation.java:15: unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown
BufferedReader br = new BufferedReader(new FileReader("People.txt"));
^
SortingImplementation.java:16: unreported exception java.io.IOException; must be caught or declared to be thrown
String line = br.readLine();
我认为这可能与我实例化的方式有关,或者我没有导入正确的头文件。这是我进口的东西
import javax.swing.JOptionPane;
import java.util.*;
import java.util.ArrayList;
import java.util.Comparator;
import java.io.*;
import java.nio.*;
你们有没有发现什么可能遗漏的地方?你们有两个选择
Person
类的情况下,在阅读该行之后,您可以将数据解析为firstName
、lastName
和age
,并将这些参数发送给构造函数Person
添加一个构造函数,该构造函数需要一个未解析的字符串
参数,并在构造函数中执行所有解析,并从中分配初始化变量但目前的问题是,您试图将
字符串
对象添加到Person
对象的数组列表
您需要这样做:
people.add(new Person(/*constructor arguments*/));
现在您已经更新为包含文件格式,请尝试以下操作:
while(line != null) {
String[] lineParts = line.split("\\s+");
people.add(new Person(lineParts[0],lineParts[1],parseInt(lineParts[2]));
line = br.readLine();
}
while(line != null) {
people.add(new Person(line));
line = br.readLine();
}
通过一个额外的
人
构造器进行操作也没什么不同
在Person
类中,添加此构造函数:
public Person(String s) {
String[] parts = s.split("\\s+");
this(parts[0], parts[1], parseInt(parts[2]));
}
然后在main中,使while
循环如下所示:
while(line != null) {
String[] lineParts = line.split("\\s+");
people.add(new Person(lineParts[0],lineParts[1],parseInt(lineParts[2]));
line = br.readLine();
}
while(line != null) {
people.add(new Person(line));
line = br.readLine();
}
你不能仅仅添加一行
字符串
,然后期望它神奇地变成人
。您需要将每一行拆分为单独的String
s,然后从这些String
Person[] people = new ArrayList<Person>();
BufferedReader br = new BufferedReader(new FileReader(name));
String line = br.readLine();
while(line != null)
{
people.add(line);
line = br.readLine();
}
Person[]people=new ArrayList();
BufferedReader br=新的BufferedReader(新文件读取器(名称));
String line=br.readLine();
while(行!=null)
{
添加(行);
line=br.readLine();
}
您需要这样做,注意从array到ArrayList的更改
ArrayList people=new ArrayList();//注意这里的变化
BufferedReader br=新的BufferedReader(新文件读取器(名称));
弦线;
而((line=br.nextLine())!=null)
{
字符串[]标记=line.split(\\s+);
字符串firstName=tokens[0];
字符串lastName=tokens[1];
int age=Integer.parseInt(标记[2]);//将字符串解析为int
添加(新的人(名字、姓氏、年龄));
}
这是假设输入文本的格式如下
名姓年龄
另外,确保将所有内容包装在try/catch
块中,或者让方法抛出IOException
“不起作用”不是一个有用的描述。在阅读问题之前,我们知道它不起作用(否则你为什么会问任何问题?)文本文件是什么样子的?显示一个文本文件格式的示例。Ahhh!!!请快点回来!我很快就要完成了,但像这样的事情会让我盯着它好几个小时……我宁愿选择第一种。如果已经内置了某种解析功能,那就太棒了。你知道我怎么能分别阅读每一行的内容吗?你也有另一个打字错误,我只是帮你修好了。但在某些地方,他的姓氏和年龄之间似乎有额外的空格,因此代币[2]
可能不一定有效<代码>令牌[tokens.size()-1]
?这就是\\s+的用途哦。。。您最初有”
。另外,由于我刚刚编辑到我的帖子中,您可能需要parseInt()
ArrayList<Person> people = new ArrayList<Person>(); // Notice change here
BufferedReader br = new BufferedReader(new FileReader(name));
String line;
while((line = br.nextLine()) != null)
{
String[] tokens = line.split("\\s+");
String firstName = tokens[0];
String lastName = tokens[1];
int age = Integer.parseInt(tokens[2]); // parse String to int
people.add(new Person(firstName, lastName, age));
}