Как я могу хранить данные из списка массивов с помощью нескольких вызовов? - PullRequest
0 голосов
/ 12 апреля 2019

Я пишу приложение для командной строки, в котором моя основная функция создает список массивов, заполняет его пользовательским вводом и затем добавляет этот контент в текстовый файл.Тем не менее, каждый раз, когда я запускаю основную функцию, список массивов естественно начинается пустым, и данные из него теряются.

Пользователь должен иметь возможность фильтровать свое содержимое по определенной детали (например, по всем именам "jane") и распечатывать его в терминале / командной строке.Я хотел бы постоянно хранить данные в списке файлов и массивов, поскольку для этого я использую методы получения.

Мой ход мыслей состоял в том, чтобы взять данные, хранящиеся в файле, и анализировать их обратно в список массивов каждый раз, когда запускается основная функция.Учитывая, что это персональный список, у меня были проблемы с этим.Буду признателен за любую помощь в подходе, чтобы помочь мне с этой задачей.

    public void writeToFile(String fileName, List<Student> students) {
        try {
            BufferedWriter printToFile = new BufferedWriter(new FileWriter(fileName, true));
            for (Student student: students) {
                printToFile.write(student.toString() + "\n");

            }
            System.out.println("Successfully Written To File!");
            printToFile.close();
        }

        catch (IOException Exception) {
            System.out.println("Error: File Not Found");
        }
    }   




    public void openFile(String fileName) {

        try{
            BufferedReader reader = new BufferedReader(new FileReader(fileName));
            String line;
            while ((line=reader.readLine())!=null)
            {
                System.out.println(lin);

            }

        }
        catch (IOException fileNotFound) {
            System.out.println("File Not Found.");
        }

    }

1 Ответ

0 голосов
/ 12 апреля 2019

Что было бы весьма полезно, если бы вы также предоставили Учащиеся Код класса в своем опубликованном вопросе, но в любом случае .....

Очевидно, ранее в вашем методе main () вы использовали пользовательский ввод для заполнения интерфейса List ученика, а затем я предполагаю, что вы успешно записали содержимое этого списка в текстовый файл. Продолжай эту мысль .....

Приложение закрывается. Теперь вы перезапустите его и теперь хотите пополнить список Ну, в общем, вам просто нужно делать в точности то, что вы делали в методе main () .

Как вы можете это сделать (не проверено!):

Убедитесь, что List<Student> students; объявлена ​​как переменная члена класса в том же самом классе, в котором находится ваш метод main () . Это сделает переменную студентов глобальной для всего класса (среди всего возможного). Теперь добавьте следующий метод в ваш основной класс. Этот метод заполнит студентов Список:

public static int loadStudentData(String fileName) {
    // Create a List to hold file data;
    List<String> dataList = new ArrayList<>();

    // Fill The Data List.
    // Use 'Try With Resources' to auto-close the BufferedReader.
    try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
        String line;
        while ((line = reader.readLine()) != null) {
            // Skip blank lines (if any);
            if (line.trim().equals("")) {
                continue;
            }
            dataList.add(line);
        }
    }
    catch (IOException fileNotFound) {
        System.out.println("File Not Found.");
    }

    /* 
      Now that you have all the Student Data from file you can
      Fill in Student instance objects and add them to the students
      List Object

      Keep in mind, I have no idea what constructor(s) or 
      what Getters and Setters you have in your Student 
      Class OR what is contained within the data file so 
      we'll keep this real basic.
    */

    // Declare an instance of Student.
    Student student;
    // Number of students to process
    int studentCount = dataList.size(); 

    // Just in case...clear the students List if it contains anything.
    if (students != null || students.size() > 0) {
        students.clear();
    }

    // Iterate through the list holding file data (dataList)
    for (int i = 0; i < studentCount; i++) {
        student = new Student(); // initialize a new Student
        // Assuming each data line is a comma delimited string of Student data
        String[] studentData = dataList.get(i).split(",|,\\s+");
        student.setStudentID(studentData[0]);                     // String
        student.setStudentName(studentData[1]);                   // String
        student.setStudentAge(Integer.parseInt(studentData[2]));  // Integer
        student.setStudentGrade(studentData[3]);                  // String

         // Add this instance of Student to the students List.
        students.add(student);
    }

    // Return the number of students processed (just in case you want it).
    return studentCount; 
    // DONE.
} 

Примечание. Не забудьте закрыть свой BufferedWriter другим методом * writeToFile () **.

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