Answer the question
In order to leave comments, you need to log in
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
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 questionAsk a Question
731 491 924 answers to any question