Javaで.iniファイルのような形式の設定ファイルを読み込む
Javaでは.propertiesファイルという、
以下のような形式のファイルを扱うためにPropertiesというクラスが利用出来る。
キー1=値1
キー2=値2
# ←これで始まるとコメントとみなされる
# キー3 = 値3
そのまま使うとインスタンス初期化→データのロード→ストリームを開いたり閉じたり、
とソースが伸びるので、短い行数で読み込めるように関数化してみた。
以下ソース
import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.Charset; import java.util.Properties; /** * 設定ファイル読み込み用のクラス * * @author phithon * */ public class PropertiesHandler { /** * 指定されたファイルを設定ファイルとして読み込み、 {@link Properties} にして返します。 * 指定されたファイルの各行は「キー=値」となるプロパティ、または#で始まるコメントを含むことが出来ます。 * * @param file 読み込むファイル * @return 読み込んだ設定 * @throws IOException 読み込みに失敗した場合 */ public static Properties load(File file) throws IOException { return load(file.getPath()); } /** * 指定されたファイルを設定ファイルとして読み込み、 {@link Properties} にして返します。 * 指定されたファイルの各行は「キー=値」となるプロパティ、または#で始まるコメントを含むことが出来ます。 * * @param filePath 読み込むファイルのパス * @return 読み込んだ設定 * @throws IOException 読み込みに失敗した場合 */ public static Properties load(String filePath) throws IOException { Properties properties = new Properties(); FileInputStream fis = null; // ファイルを適当に読み込む InputStreamReader isr = null; // 文字コードを直す try { fis = new FileInputStream(filePath); isr = new InputStreamReader(fis, Charset.defaultCharset()); properties.load(isr); } finally { // 問題が起きたらとりあえずストリームを閉じ、残りは呼び出し側に任せる if (isr != null) { if (fis != null) { fis.close(); } isr.close(); } } return properties; } public static void main(String[] args) throws IOException { Properties props = PropertiesHandler.load("./data/config.txt"); System.out.println(props); System.out.println(props.getProperty("キー1")); } }
さっきのファイルを ./data/config.txt として読み込んでみる。
以下実行結果
{キー2=値2, キー1=値1} 値1