У меня есть класс простого объекта, например man, с двумя полями name и age. И мне нужно, чтоб при старте программы, считывался текстовый конфигурационный файл, в котором будут описаны экземпляры класса. Например
[vova]
age=12
[max]
age=10
и т.д. ну и дальше, я бы создал соответствующие экземпляры с этими параметрами.
Понятно, что я могу написать кастомный парсер файла...но может уже есть готовый инструмент типа properties ?
формат файла с настройками не принципиален, я привел пример на вскидку...
Судя по всему вы хотите сериализовывать и десериализовывать Java Beans. Есть стандартная реализация этого через XML файлы.
Предположим, что ваш Java Bean представляет из себя следующий класс:
package com.example;
public class Human {
private String name;
private int age;
public Human() {
// needs for serialization
}
public Human(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Human{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
Переопределение toString()
тут необязательно. Я его сделал лишь для того, чтобы иметь возможность распечатывать объекты в демонстрационном коде. А вот и сам демонстрационный код, показывающий процесс сериализации и десериализации экземпляров класса Human
:
public static void main(String[] args) {
Human bob = new Human("Bob", 34);
Human mary = new Human("Mary", 27);
try (XMLEncoder encoder = new XMLEncoder(new FileOutputStream("humans.xml"))) {
encoder.writeObject(bob);
encoder.writeObject(mary);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try (XMLDecoder decoder = new XMLDecoder(new FileInputStream("humans.xml"))) {
Human human1 = (Human) decoder.readObject();
Human human2 = (Human) decoder.readObject();
System.out.println(human1);
System.out.println(human2);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
Программа распечатает:
Human{name='Bob', age=34}
Human{name='Mary', age=27}
Тоесть в переменных human1
и human2
будут находиться объекты, эквивалентные тем, что находятся в переменных bob
и mary
соответственно.
Для рабочего кода желательно так же переопределить equals()
и hashCode()
в классе Human
.
Содержимое файла humans.xml
, в моём случае, получилось таким:
<?xml version="1.0" encoding="UTF-8"?>
<java version="10.0.2" class="java.beans.XMLDecoder">
<object class="com.example.Human">
<void property="age">
<int>34</int>
</void>
<void property="name">
<string>Bob</string>
</void>
</object>
<object class="com.example.Human">
<void property="age">
<int>27</int>
</void>
<void property="name">
<string>Mary</string>
</void>
</object>
</java>
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Программа выдает такую ошибку при запускеПрописал в командоре класспас
Объясните логику написания приложения используя JavaFXСуть у меня такая: есть три FXML файла mainWindows, Windows2 - которое открывается используя Button2,...
Всем привет! У меня очень странная проблема, буквально час назад у меня все собиралось, но сейчас пересталоХотя я ничего не менял :(