Как ввести данные из TXT-файла в массив.Вовлечение нескольких типов данных и объектов классов, которые являются переменными для других классов - PullRequest
1 голос
/ 20 августа 2011

Я читаю данные из разных текстовых файлов, чтобы создать объекты, а затем в массивы объектов.

в качестве примера у меня есть класс учителя с 3 или 4 переменными

public class Teacher {



        public static String teacherNo;
        public static String firstName;
        public static String lastName;
        public static Courses coursestought; 

и класс Courses

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,)

У меня есть все правильные методы получения и установки (я думаю)

Я читаю из текстового файла, как это.

BufferedReader inFile = new BufferedReader (new FileReader 
           ("pathtofile/teachers.txt"));

И я создаю объекты Учителя, подобные этому

String inputLine;
        inputLine = inFile.readLine();
        while (inputLine != null)
        {

            teacherlist.add(new Teacher
                    (inputLine, inputLine, inputLine, inputLine,));
            inputLine = inFile.readLine();
        }

Но это работает, только если все поля являются строками, а не смесью строк, переменных и объектов.Поля в текстовом файле представляют собой 1 строку для учителя и разделены:

Может ли кто-нибудь указать мне правильное направление здесь?

Нужно ли разрезать строки, когда я их читаю?

1 Ответ

1 голос
/ 20 августа 2011

Да. Вам нужно использовать 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 также не должны быть статическими. Статический означает уровень класса, а не уровень объекта.

Если у вас есть класс Учителя, который выглядит следующим образом,

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);
}

Предполагается, что в строке вашего учителя в тексте есть код курса и название курса.

...