@Important_question

Как прочитать файл json в коллекцию?

Записал в файл json коллекцию PriorityQueue. Теперь захотел прочитать этот объект из файла. Все остальное работает нормально, проблема скорее всего только в методе который записывает в файл или в методе который считывает файл.
При считке файла выдает RuntimeException.
/**
     * Запись коллекции в файл
     *
     * @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<>();

    }
  • Вопрос задан
  • 98 просмотров
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
Gson использует дефолтный конструктор(без аргументов) для создания инстансов. Тебе придется создать свой Instance Creator для ZoneId. Подробнее.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Emphasoft Санкт-Петербург
от 150 000 до 300 000 ₽
Kotelov Санкт-Петербург
от 150 000 до 190 000 ₽
SCHNEIDER GROUP Санкт-Петербург
от 160 000 до 190 000 ₽