我正在从不同的 txt 文件中读取数据来创建对象,然后读取到对象的数组列表中。
举个例子,我有一个包含 3 或 4 个变量的教师类(class)
public class Teacher {
public static String teacherNo;
public static String firstName;
public static String lastName;
public static Courses coursestought;
还有一门类(class)
public class Course {
public static String cCode;
public static String cName;
教师类的构造函数是这样的
// constructor
public Teacher(String teacher_No,String first_Name,String last_Name,
Course coursesTought,)
我有所有正确的 getter 和 setter(我认为)
我从这样的文本文件中读取。
BufferedReader inFile = new BufferedReader (new FileReader
("pathtofile/teachers.txt"));
我像这样创建了 Teacher 对象
String inputLine;
inputLine = inFile.readLine();
while (inputLine != null)
{
teacherlist.add(new Teacher
(inputLine, inputLine, inputLine, inputLine,));
inputLine = inFile.readLine();
}
但这仅在所有字段都是字符串而不是字符串、变量和对象的混合时才有效。文本文件中的字段为教师 1 行,并用 :
分隔有人能给我指出正确的方向吗?
我读入字符串时需要剪断它们吗?
最佳答案
是的。您需要使用String#split()要在读取字符串后分割它们,创建对象然后将它们添加到数组列表中
List<Teacher> teachers = new ArrayList<Teacher>();
BufferedReader inFile = new BufferedReader (new FileReader
("pathtofile/teachers.txt"));
String inputLine;
while ( (inputLine = inFile.readLine() ) != null) { // read one line at a time
String[] teacherVars = inputLine.split(":"); // split into a string array.
teachers.add(new Teacher(teacherVars[0], teacherVars[1], teacherVars[2], teacherVars[3]);
}
从您的问题中不太清楚如何在文本文件中表示 Courses
对象。如果同一行的长度可变,您可能需要执行一些额外的操作来动态创建 Courses
对象,然后创建 Teacher
对象。
类 Teacher
和 Courses
中的实例变量也不应该是静态的。静态意味着类级别而不是对象级别。
如果您有一个类似这样的 Teacher 类,
public class Teacher {
private String teacherNo;
...
private List<Course> courses;
public List<Course> getCourses() {
if ( courses == null)
courses = new ArrayList<Course>();
return courses;
}
}
然后,你可以在 while 循环中这样调用它 --
while ( (inputLine = input.readLine() ) != null ) {
Teacher teacher = new Teacher(teacherVar[0], teacherVar[1], teacherVar[2]);
Course aCourse = new Course(teacherVar[3], teacherVar[4]);
teacher.getCourses().add(aCourse);
}
假设您的教师文本行包含类(class)代码和类(class)名称。
关于java - 如何将txt文件中的数据输入到数组列表中。涉及多种数据类型和作为其他类的变量的类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7133077/