Я видел, как это реализовано и через отражение. В основном существует метод, который будет проходить через элементы объекта и соответствующим образом копировать их в новый объект. Когда он достиг ссылочных типов или коллекций, я думаю, что он сделал рекурсивный вызов сам по себе. Отражение стоит дорого, но оно работает очень хорошо.
Существует, конечно, много хороших решений на основе того, в чем Вы нуждаетесь. Если это - просто конфигурация, необходимо взглянуть на Джакарту конфигурация свободного городского населения и систематизатор свободного городского населения .
Вы могли всегда использовать стандартный метод JDK получения документа:
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
[...]
File file = new File("some/path");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse(file);
Существует ли конкретная причина, Вы выбрали файлы конфигурации XML? Я сделал конфигурации XML в прошлом, и они часто оказывались большим количеством головной боли, чем что-либо еще.
я предполагаю, что реальный вопрос состоит в том, могли ли с помощью чего-то как эти предпочтения API работать лучше в ситуации.
Причины использовать Предпочтительный API по самокрутке решение XML:
Избегает типичного уродства XML (DocumentFactory, и т.д.), наряду с уходом от сторонних библиотек для обеспечения бэкенда XML
Созданный в поддержке значений по умолчанию (никакая специальная обработка, требуемая для недостающих/поврежденных/недопустимых записей)
Никакая потребность санировать значения для устройства хранения данных XML (обертывание CDATA, и т.д.)
состояние Guaranteed запоминающего устройства (никакая потребность постоянно выписать XML к диску)
, Запоминающее устройство настраивается (файл на диске, LDAP, и т.д.)
Многопоточный доступ ко всем предпочтениям свободного
JAXB прост в использовании и включен в Java 6 SE. С JAXB или другими данными XML, связывающими такой как Простые, Вы не должны обрабатывать XML сами, большая часть работы сделана библиотекой. Основное использование должно добавить аннотацию к Вашему существующему POJO. Они аннотация тогда используются для генерации XML-схемы для Вас данные и также при чтении/записи данных из файла.
Я только использовал jdom. Это довольно легко.
Идут сюда для документации и загружать его: http://www.jdom.org/
, Если у Вас есть очень очень большой документ тогда, лучше не считать все это в память, но использовать синтаксический анализатор SAX, который называет Ваши методы, поскольку это поражает определенные теги и атрибуты. Необходимо тогда создать конечный автомат для контакта с входящими вызовами.
Самое простое безусловно будет Просто http://simple.sourceforge.net , только необходимо аннотировать отдельный объект как так
@Root
public class Entry {
@Attribute
private String a
@Attribute
private int b;
@Element
private Date c;
public String getSomething() {
return a;
}
}
@Root
public class Configuration {
@ElementList(inline=true)
private List<Entry> entries;
public List<Entry> getEntries() {
return entries;
}
}
Тогда все, что необходимо сделать для чтения, целый файл, определяют местоположение, и это проанализирует и заполнит аннотируемый POJO. Это сделает все преобразования типов и проверку. Можно также аннотировать для обратных вызовов стойкого организма при необходимости. Чтение его может быть сделано как так.
Serializer serializer = new Persister();
Configuration configuraiton = serializer.read(Configuration.class, fileLocation);
В зависимости от Вашего приложения и объема cfg файла, файл свойств мог бы быть самым легким. Уверенный это не столь изящно как xml, но это, конечно, легче.
Используйте java.beans.XMLDecoder
, часть базового Java SE с тех пор 1.4.
XMLDecoder input = new XMLDecoder(new FileInputStream("some/path.xml"));
MyConfig config = (MyConfig) input.readObject();
input.close();
Это легко к , пишут конфигурационные файлы рукой или используют соответствие XMLEncoder
с некоторой установкой для записи новых объектов во времени выполнения.
Какая самая лучшая / простая библиотека для использовать для чтения значений из этот файл?
Поскольку вы просите простейшую библиотеку, я чувствую себя обязанным добавить подход, совершенно отличный от того, что в ответе Гийома, получившем наибольшее количество голосов . (Из других ответов упоминание sjbotha JDOM ближе всего к тому, что я предлагаю).
Я пришел к выводу, что для обработки XML в Java использование стандартных инструментов JDK, безусловно, не самый простой способ, и это только при некоторых обстоятельствах (например, при невозможности использования сторонних библиотеки, почему-то) это лучший способ.
Вместо этого рассмотрите возможность использования хорошей библиотеки XML, такой как XOM . Вот как читать XML-файл в объект nu.xom.Document
:
import nu.xom.Builder;
import nu.xom.Document;
import java.io.File;
[...]
File file = new File("some/path");
Document document = new Builder().build(file);
Это было немного проще, чем чтение файла в org.w3c.dom.Document
тоже не было очень сложным, в "
Вот действительно простой API, который я создал для чтения простых файлов XML на Java. Это невероятно просто и удобно. Надеюсь, это будет полезно для вас.