Как мне прочитать файлы как объект или есть лучшее решение для этого? Пожалуйста, смотрите код ниже для контекста - PullRequest
0 голосов
/ 06 марта 2020

Так что в моем классе java нам нужно прочитать этот файл и каким-то образом преобразовать его содержимое в объект

import java.util.Scanner;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class Calendar {

  public Appointment[] appointments;

  Calendar()
  {
    appointments = null;

  }
  Calendar(int capacity, String filename)
  {

    Appointment[] appointments = new Appointment[capacity]; 
     //you can see that appointments is an Appointment object
    readCalendarFromFile(filename);}

   private void readCalendarFromFile(String fileName){

    Scanner fileRead = null;

    try

    {

      fileRead = new Scanner(new FileInputStream("appointments.txt"));

for(int r = 0; r < 30; r++)

        appointments[r]= fileRead.nextLine(); ----> This is where I am getting my error from as I cannot convert String into an object. Is there a way that I can pass this
      fileRead.close();
    }
    catch (FileNotFoundException fe)
    {
      fe.printStackTrace();
      System.err.println("Unable to open the file " + fileName + " for reading.");
    }
  }

}

Есть ли способ, которым я могу преобразовать filetext в объект или у меня есть сделать что-то еще с этим? Я должен назначить встречу объекту, чтобы я не мог изменить его на что-либо другое, к сожалению.

1 Ответ

0 голосов
/ 06 марта 2020

У вас где-то должен быть класс Appointment, и вы пытаетесь добавить объект типа Appointment к массиву назначений, основываясь на информации, которую вы получаете из текстового файла, верно?

Итак, у вас есть для l oop, который читает каждую строку из текстового файла, а затем вам нужно создать экземпляры Appointment для каждой строки.

Класс Appointment имеет своего рода конструктор, который вы нужно вызвать для создания из него новый объект (читай: «новый экземпляр»).

Давайте предположим, что это выглядит так:

public Appointment(String title, String time, String location) {
    this.title = title;
    this.time = time;
    this.location = location;
}

Давайте также предположим, что каждая строка в Файл appointments.txt форматируется следующим образом:

<Title>, <Time>, <Location>

Это означает, что вам придется проанализировать строку, которую вы прочитали из файла, разделив ее (разделителем в этом случае будет " , ". Просто проведите быстрое исследование inte rnet о том, как разбивать строки в Java, на самом деле это довольно просто.

Когда у вас есть все биты информации в отдельных переменных, вы Мы вызываем конструктор Appointment, чтобы создать новую встречу, которую вы затем можете добавить в свой массив. Предполагая, что у вас есть три строки с заголовком, временем и местоположением встречи (или любой другой информацией в текстовом файле), это будет выглядеть так:

try{
    fileRead = new Scanner(new FileInputStream("appointments.txt"));

    int counter = 0;
    while(fileRead.hasNext()) {
        String lineRead = fileRead.nextLine();
        // here comes the parsing of the line into three String variables
        appointments[counter] = new Appointment(title, time, location);
        fileRead.close();
    }
} catch(FileNotFoundException ex) {
    // Do some exception handling in here, or just print the stacktrace
}

Строка, которую я хочу вам наибольшее внимание уделить линии, на которой написано new Appointment(title, time, location). Разница между этим и кодом, который вы опубликовали, состоит в том, что здесь я создаю новый объект типа Appointment, который соответствует типу массива, который вы создали ранее, в строке Appointment[] appointments = new Appointment[capacity].

You пытался напрямую добавить строку в массив, хотя вы объявили массив типа Appointment, а не типа String.

. Вы должны прочитать топи c объектов в Java в общем, и что такое конструкторы, что они делают и как вы их используете.

Например, эта топика c действительно хорошо и исчерпывающе объясняется в официальных Java руководствах Oracle (компания, которая разрабатывает язык Java). Я связал вас с конкретным разделом c, в котором говорится о конструкторах, но я бы посоветовал вам прочитать хотя бы всю главу и все перед ней, что поможет вам понять, о чем они на самом деле говорят.

Надеюсь, это поможет: )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...