javaの入出力 ~プロパティファイル~

こんにちは。GBS近です。

本稿では、Java初心者を想定として、
Javaの入出力について取り扱います。

データをやり取りする際、
xml、csv、properties、DB、json  などと、
色んなファイル形式のものを取り扱うと思います。
今回は、その中の1つであるプロパティファイルについて、
取り扱っていきたいと思います。

 

■プロパティファイルとは?
   まずは、プロパティファイルについて、
   基本部分を箇条書きで押さえます。

   ・拡張子が「.properties」である。
   ・「キー=値」の形式で記載される。
   ・コメントは先頭に「#」をつける。

   参考画像
   

   例えば、上記の参考画像では、
   「UserName、PassWord」が『キー』、
   「Admin、Sample」が『値』 となります。

   プロパティファイルでは、キーと値が必ずセットになっています。
   それは、プロパティファイルから内容を読み込みたいときは、
   『キー』を指定して、『値』を取り出すという形になるからです。

   さて、プロパティファイルの基本を押さえたところで、
   javaでのプロパティファイルの取り扱いに入っていきます。

 

■リソースバンドルを使用した読み込み
   まずは、リソースバンドルを使用した読み込みからです。
   こちらは、JavaAPIの「java.util.ResourceBundle」を使用します。

   上記の参考画像のSample.propertiesファイルを読み込む場合の、
   シンプルな例を紹介します。
   ———————————————————————————–
   import java.util.ResourceBundle;
   
   class sample {
     public static void main(String[] args) {
       // プロパティファイルを指定し、リソースバンドルを取得する。
       ResourceBundle rb = ResourceBundle.getBundle("Sample");

       // getStringメソッドでキーを指定し、値を取得する。
       System.out.println(rb.getString("UserName"));
   ———————————————————————————–
     実行結果:Admin
   ———————————————————————————–
   ソース内容は非常にシンプルとなっています。
   ①プロパティファイルを指定して読み込む。
   ②読み込んだものから、キー指定して値を取り出す。
   やっていることはこの2つだけです。

   1つ注意するならば、プロパティファイルを指定するとき、
   拡張子の「.properties」は含みません。
   さて、取り扱う言語が英語の場合は、いいのですが、
   日本語の場合、このままだと扱うことができません。
   
   リソースバンドルでは、プロパティファイル読み込み時、
   文字コード「ISO-8859-1」で読み込むためです。
   「ISO-8859-1」では、日本語を扱えないため、
   日本語を扱うようにするには、プロパティファイルの日本語を、
   Unicode変換する必要があります。

   Unicode変換するには「native2ascii」という、
   Java開発環境で提供されているツールを使用します。
   使用法は以下の通りとなります。
  

   「native2ascii」はコマンドラインで実行します。
   変換するファイル名と変換後のファイル名を指定するだけで、
   画像のようにUnicode変換をしてくれます。
   この状態にすれば、日本語でも扱えるようになります。

 

■Propertiesを使用した読み込み
   2つ目は、JavaAPIの「java.util.Properties」を使用します。
   こちらも、Unicode変換で日本語を扱えますが、
   それ以外の方法を紹介します。
   ———————————————————————————–
   import java.io.BufferedReader;
   import java.io.FileInputStream;
   import java.io.IOException;
   import java.io.InputStreamReader;
   import java.util.Properties;
   
   class sample {
     public static void main(String[] args)  throws IOException {
       // プロパティファイルをバイト入力ストリームとして読み込む。
       FileInputStream fis = new FileInputStream("sample.properties");

       // 文字コード:UTF-8として、文字入力ストリームに変換する。
       InputStreamReader isr = new InputStreamReader(fis, "UTF-8");

       // バッファリングして、効率的に読み込む。
       BufferedReader br = new BufferedReader(isr);

       // 文字入力ストリームからプロパティリストを読み込む。
       Properties prop = new Properties();
       prop.load(br);

       // getPropertyメソッドでキーを指定し、値を取得する。
       System.out.println(prop.getProperty("UserName"));
   ———————————————————————————–
     実行結果:Admin
   ———————————————————————————–
   日本語対応するために、先ほどよりは複雑になっています。
   先ほどは、Unicode変換していましたが、
   今回は、日本語に対応できる文字コード(上記だとUTF-8)をあらかじめ指定して、
   プロパティリストを取得しています。

   リソースバンドルとは違い、プロパティファイルを指定するとき、
   拡張子「.properties」まで含めないといけないので注意です。
   キーから値を取得するやり方は、
   リソースバンドルと同じで、メソッド名が変わった位です。

■あとがき
   今回は、propertiesファイルについて扱っていきました。
   英語だけだと、シンプルに扱えますが、
   日本語が入ると若干手間がかかるといったところです。

   最後に初投稿となりましたが、今後ともよろしくお願い致します。

Java

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です