Javaと設定ファイル形式
プロパティファイル
code:hoge.properties
# コメント
hoge.mail=foo@bar.example.com
fuga.enable=true
piyo.message=Value can contain spaces without quotes.
java.util.Properties クラスで値を取得したりする。
ロケールでファイルを切り替える機能のある java.util.ResourceBundle もあるが、これは直接UTF-8で書けず native2ascii コマンドで変換する必要がある。
XML
JavaといえばXML。APIがたくさんある。
DOM:Document Object Model
文書をオブジェクトのツリー構造として扱う。
javax.xml.parsers.DocumentBuilder を使う。
ツリー全体を読むのでメモリ消費が大きくなりがち。
SAX:Simple API for XML
構文解析しながらイベントドリブンで処理をする考え方。
org.xml.sax.helpers.DefaultHandler を継承してコールバックを書く。
処理が軽いができることが限られる。複数の要素を同時に取得するとかできない。
StAX:Streaming API for XML
Java 6から入ったAPI。SAXと同じイベントドリブン。
パースとユーザー処理の関係がSAXと逆で、パース処理自体を中止できたりする。
SAXをプッシュ型、StAXをプル型と呼び分ける。
使うクラスは
Cursor API org.xml.stream.XMLStreamReader
Event Iterator API javax.xml.stream.XMLEventReader など。
ツリー全体を読み込む必要がなく簡潔にかける。ファイルの書き出しも比較的簡単。
XPath:Xml Path language
webでもおなじみのアレ。条件に適合する要素を一括で取り出すことができる。
javax.xml.xpath.XPathFactory など。
DOMと同じくツリー全体を読み込む。
JAXB:Java Architecture for XML Binding
XMLファイルとJavaのオブジェクトを結びつけるもの。
javax.xml.bind.annotation.XmlElement をアノテーションとしてつけ、javax.xml.bind.JAXB で変換する
JSON
Java EE 7から標準APIに取り込まれたが、EEだし、オブジェクトにマッピングするJAXB相当のものがないなど使いにくい。
サードパーティのライブラリを使うことが多いらしい。