【Java基礎】プロパティファイルから情報を読み込む
  • facebookページ
  • twitterページ
  • 2019.10.30

    【Java基礎】プロパティファイルから情報を読み込む

    プロパティファイルとは?

    プロパティファイルとは、キーと値でプログラムで使用する設定値などを保存するためのファイルです。Javaアプリケーションの設定ファイルとして一般的に使われています。

    設定が変わっても再コンパイル不要

    プロパティファイルには、プログラムの既定値やデータベースの接続情報などの情報を保存します。このような情報は後から変更になったり、開発/本番などの環境によって内容が違ってくるため、プロパティファイルに記述しておくことで、後から変更が発生してもコンパイルなしでプログラムの動作を変えられます。

    Javaのコードから設定を追い出す

    次のJavaプログラムを見てください。ソースコードの中にデータベースのホスト名や認証情報が直接書かれています。このようなプログラムだと、データベースの接続先が変わるたびに、再コンパイルが必要となり、ソースの管理や運用面で非常に手間になります。

    データベースの情報をプロパティファイルから読み込むように、プログラムを書き換えたものが次の例です。

    外部のファイルからデータベースの情報を読み込んでいるため、Javaのソースコード上から環境依存する情報が消えました。これにより、接続先が変わってもJavaの再コンパイルは不要になりました。

    ▪️ プロパティファイル(sample.properties)

    プロパティファイルの書き方

    ここでは、プロパティファイルの基本的な書き方を紹介していきます。まずは、任意の場所に拡張子が「.properties」でプロパティファイルを作成してください。

    設定を追加する

    設定は「キー名=値」の形式で記述します。複数の設定を書く場合は、改行して書きます。

    コメントの書き方

    プロパティファイルには、任意のコメント行を追加することができます。コメントは「”#コメント」の形式で記述します。

    プロパティファイルをJavaから読み方法

    作成したプロパティファイルを、Javaのプログラムから読み込む方法を解説します。

    ResourceBundleクラス

    java.utilパッケージの、ResourceBundleクラスを使ってプロパティファイルを読むことができます。getBundleメソッドの引数には、拡張子なしのファイル名を指定します。

    ResourceBundleのインスタンスを作成したら、getStringメソッドにキー名を指定すると、指定したキーに対応した値が、戻り値として返ってきます。

    Propertiesクラス

    もう一つの方法として、java.utilパッケージの、Propertiesクラスでもてプロパティファイルを読むことができます。Propertiesクラスを使用する場合は、ドライブのルートディレクトリからのフルパスでファイル名を指定する必要があります。

    Javaプログラムからプロパティファイルを書き込む

    Javaのプログラムを使って、プロパティファイルに書き込むこともできます。次のサンプルコードのように、PropertiesクラスのsetPropertyメソッドを使用することで、値を書き込めます。最後にstoreメソッドを呼び出すことでファイルが保存されます。

    ※同じキーが存在する場合は、値が上書きされます。

    日本語のエスケープ

    プロパティファイルは、デフォルトではファイルのエンコーディングが「ISO-8859-1」で保存されています。「ISO-8859-1」は基本的にアルファベットなどのASCII文字しか扱えず、日本語などのマルチバイト文字は扱えません。

    マルチバイト文字を扱う場合は、次のように、日本語をUnicodeエスケープした形に変換し、ASCII文字で扱えるようにします。

    例)「こんにちわ」をUnicodeエスケープした場合

    マルチバイト文字をUnicodeエスケープする方法について、以下に3つの方法を紹介します。

    「native2ascii」を使用

    1つ目に紹介する方法は、JavaのJDKに含まれる「native2ascii.exe」を使用する方法です。これを利用すると、日本語が書かれたプロパティファイルを、Unicodeエスケープしたファイルに変換できます。

    使用方法は、まず日本語がそのまま書かれたプロパティファイルを用意します。今回のサンプルでは次のファイルを用意しました。

    ■ 変換前のファイル

    変換を行うには、コマンドプロンプトを起動し、次のコマンドを入力します。

    実際に「native2ascii.exe」を使ってコマンドを入力すると、[変換後のファイル名]で指定したファイルに、日本語をUnicodeエスケープしたものが出力されます。

    ▪️ 変換後のファイル

    Eclipseプラグインを使用

    Javaの開発では、Eclipseを使ってい人が多いと思います。Eclipseには沢山のプラグインがあり、プロパティファイルに関しても、便利なものがあります。

    「PropertiesEditor」というプラグインは、日本語などのマルチバイト文字を、編集時は普通に日本語で入力でき、ファイル保存時に自動的にUnicodeエスケープしてくれる便利なプラグインです。

    【関連記事】
    EclipseとJavaで作れるもの。インストール~プログラム実行まで紹介

    ブラウザを使ってUnicodeにエスケープ

    上で紹介した2つの方法は、手元の環境にJavaの開発環境が必要になります。Javaの開発環境が作れない場合は、日本語の文字をUnicodeにエスケープしてくれるWEBサービスもあり、ブラウザにアクセスするだけで手軽に利用できます。

    今回は「Unicodeエスケープシーケンス変換ツール」というサイトを紹介します。このサイトは次の画面イメージのように、画面左のテキストボックスに、変換したい日本語を入力すると、右側のテキストボックスにUnicodeエスケープした文字を表示してくれるWebツールです。


    Unicodeエスケープシーケンス変換ツール

    ポテパンダの一言メモ

    ひと昔前までは、プロパティファイルは「ISO-8859-1」でエンコードされているのが一般的でしたが、Java7や8以降からは、「UTF-8」でプロパティを作成することも多くなってきました。

    メッセージの国際化でもプロパティファイル

    日本だけでなく、海外でも利用されるアプリケーションが場合、利用者の国と地域によって表示言語を切り替える国際化の対応が必要です。

    国際化の対応は少し面倒で、例えば次のコードでは、Javaのソースコード上にメッセージの文字列が直接記述されているため、どの国と地域でも1つの言語でしか表示ができません。

    Javaには、地域(Locale)によって読み込むプロパティファイルを切り替える機能があり、これを利用して国際化の対応を行なっていきます。以降で、プロパティファイルを使って国際化に対応する方法を、解説します。

    [STEP1] 対応する地域(Locale)の数だけファイルを準備

    プロパティファイルで多言語に対応するには、まず同じキーを持つプロパティファイルを、対応する地域(Locale)の数だけ用意します。

    今回のサンプルコードは、日本語と英語の2つの言語に対応していきます。最初に、英語と日本語で記述したプロパティファイルを2つ用意しましょう。

    ▪️ strings_en.properties (英語)

    ▪️ strings_ja.properties (日本語)

    さらに、上記以外の地域の人のために、デフォルト言語のプロパティファイルも作成して、計3つのファイルを作成します。

    ▪️ strings.properties (デフォルト)

    [STEP2] Javaで地域(Locale)を指定して読み込み

    プロパティファイルを作成したら、次のサンプルコードのように、地域(Locale)によって読み込むプロパティファイルを切り替える処理を作成します。

    上のコードを実行すると、以下のような実行結果が表示されます。

    まとめ

    プロパティファイル(拡張子が.propertiesのファイル)について、書き方の構文や、Javaのプログラムから読み書きする方法について、解説してきました。

    Javaの開発では、プロパティファイルに設定値などを保存するのが一般的です。この機会にプロパティファイルの扱い方を覚えておきましょう。



    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE