I
I
Important_question2021-04-26 21:53:04
Java
Important_question, 2021-04-26 21:53:04

How to read json file into collection?

Wrote the PriorityQueue collection to the json file. Now wanted to read this object from a file. Everything else works fine, the problem is most likely only in the method that writes to the file or in the method that reads the file.
Throws a RuntimeException when reading a file.

/**
     * Запись коллекции в файл
     *
     * @param collection -коллекция, которую нужно записать
     */
    public void writeCollection(PriorityQueue collection) {
        if (file != null) {
            if (!file.canWrite()) {
                System.out.println("\u001B[37m" + "\u001B[31m" + "Недостаточно прав для записи в файл. Добавьте права на запись " + "\u001B[31m" + "\u001B[37m");
                try (PrintWriter out = new PrintWriter(new PrintWriter(new File("file2")))) {
                    out.write(gson.toJson(collection));
                    out.close();
                    System.out.println("Не переживайте. Мы записали вашу коллекцию в новый файл: " + "/home/s285384/PROGA/lab5/file2");
                } catch (Exception e) {
                    Messages.normalMessageOutput("\u001B[37m" + "\u001B[31m"+"Не найдена локальная переменная"+ "\u001B[31m" + "\u001B[37m");

                }

            } else {
                try (PrintWriter pw = new PrintWriter(new PrintWriter(envVariable))) {
                    File file = new File(envVariable);

                    pw.write(gson.toJson(collection));
                    pw.close();
                    System.out.println("Коллекция успешно сохранена в файл!");

                } catch (Exception e) {
                    System.out.println("Коллекция не смогла сохраниться");

                }
            }
        } else System.out.println("Системная переменная с загрузочным файлом не найдена!");
    }

    /**
     * Чтение коллекции из файла
     *
     * @return коллекция, которая была считана из файла
     */
    public PriorityQueue<StudyGroup> readCollection() {
        if (file!= null) {
            if (file.exists() & !file.canRead()) {
                System.out.println("\u001B[37m" + "\u001B[31m" + "Недостаточно прав для чтения данных из файла. Добавьте права на чтение и запустите программу вновь" + "\u001B[31m" + "\u001B[37m");
                System.exit(0);
            }
            try (FileReader fileScanner = new FileReader(file)) {
                Type collectionType = new TypeToken<PriorityQueue<StudyGroup>>(){}.getType();
                PriorityQueue<StudyGroup> collection = gson.fromJson(fileScanner, collectionType);
                System.out.println("\u001B[37m" + "\u001B[33m" + "Коллекция успешно загружена!" + "\u001B[33m" + "\u001B[37m");
                if (collection == null) return new PriorityQueue<>();
                return collection;
            } catch (FileNotFoundException e) {
                System.err.println("Файл с таким именем не найден :(");

            } catch (IOException e) {
                System.err.println("Ошибка ввода-вывода");

            } catch (JsonSyntaxException e) {
                System.err.println("Формат файла не удовлетворяет условию");
            }
            catch (RuntimeException e){
                Messages.normalMessageOutput("\u001B[37m" + "\u001B[33m"+"Файл написан с ошибкой, перепроверьте файл и запустите программу снова"+ "\u001B[33m" + "\u001B[37m");
            }
        } else
            System.out.println("\u001B[37m" + "\u001B[31m" + "Системная переменная с загрузочным файлом не найдена!" + "\u001B[31m" + "\u001B[37m");
        return new PriorityQueue<>();

    }

Answer the question

In order to leave comments, you need to log in

1 answer(s)
D
Denis Zagaevsky, 2021-04-26
@Important_question

Gson uses a default constructor (no arguments) to create instances. You will have to create your own Instance Creator for the ZoneId. Read more .

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question