JavaでHello World
Google
  HOME  |  基礎  |  掲示板  |  ツール |  書籍  |  デザインパターン  |  リンク  |  フィードバック
JavaでHello World > プロパティファイル編  
メニュー
Home
情報交換掲示板
ツールの部屋
Java関連の書籍
アプリケーション編
Swing編
Swing(イベント)編
Swing(Look&Feel)編
アプレット編
iアプリ編
サーブレット編
サーブレット(Linux)編
サーブレット(web.xml)編
サーブレット(セッション)編
サーブレット(クッキー)編
サーブレット(フィルタ)編
JSP編
JSP(ディレクティブ)編
JSP(アクション)編
JSP(スクリプト)編
JSP(オブジェクト)編
JSP(カスタムタグ)編
JSP(データベース)編
Apache + Tomcat編
Struts編
JDBC編
JDBC(データソース)編
JDBC(MySQL)編
JDBC(PostgreSQL)編
JDBC(トランザクション)編
JavaMail(SMTP)編
JavaMail(POP)編
JNI編
RMI編
RMI(アプレット)編
CORBA編
JNDI編
EJB編
EJB(Entity Bean)編
JMS(PTP)編
JMS(Pub/Sub)編
XML(SAX)編
XML(DOM)編
XSLT編
SOAP編
国際化編
国際化(タイムゾーン)編
国際化(通貨)編
リフレクション編
コレクション編
コレクション(Set)編
コレクション(List)編
コレクション(Map)編
スレッド編
正規表現編
アサーション編
ログ機能編
サウンド編
ファイル入出力編
URL編
ソケット編
データグラム編
HTTP
FTP編
jar編
javadoc編
Ant編
外部コマンド編
プロパティファイル編
システムプロパティ編
Eclipse編
  2002/11/26  田中宏和
プロパティファイル編
◆プロパティファイルとは?
Javaのプロパティファイルとは「キー=値」という形式でデータを持つJavaのアプリケーションから利用されるファイルのことです。拡張子は「.properties」にします。たとえば、アプリケーションで使う値を外部のプロパティファイルから読み込むことによって、Javaのコードを変更することなしにプログラムで使用する値を変えて実行することができるようになります。
◆ここでの環境
OS Windows XP
J2SE SDK 1.4.1_01
◆実行環境の構築
実行環境の構築についてはアプリケーション編を参考にしてください。
◆実際のプロパティファイルを見てみよう
実際にプロパティファイルの中身がどうなっているか見てみます。ここではJ2EE SDKで使われているejb.propertiesというファイルです。
ejb.properties
audit.log.file=audit.log
repository.directory=repository
applications.directory=applications
http.port=9191

transaction.interoperability=true
transaction.jtsclient-policycheck=false

「キー=値」という形式になってますね。
 
◆プロパティファイルから読み込むプログラムの作成
■プロパティファイルの作成
エディタでプロパティファイルを作成します。
javahello.properties(ここからダウンロード)
javahello.message=Hello World
javahello.url=http://www.hellhiro.com/
■プロパティファイルから値を読み込むソースの作成
プロパティファイルから値を読み込んで表示するプログラムを作成します。
HelloWorldGetProperties.java(ここからダウンロード)
import java.util.*;
import java.io.*;

public class HelloWorldGetProperties {
  public static void main(String[] args) {
    try {
      Properties prop = new Properties();
      // プロパティファイルからキーと値のリストを読み込みます
      prop.load(new FileInputStream("javahello.properties"));
      // "javahello.message"に設定されている値を取得します
      String message = prop.getProperty("javahello.message");
      // "javahello.url"に設定されている値を取得します
      String url = prop.getProperty("javahello.url");

      // 読み込んだ値を表示します
      System.out.println("メッセージ:" + message);
      System.out.println("URL:" + url);
      
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}
 
(メモ)
getProperty("key")メソッドは、指定されたキーの値が存在しない場合、nullを返却します。
getProperty("key" , "Hello World")のように2番名の引数を使用することによって、キーの値が存在しない場合に2番目の引数の値(デフォルト値)を返却するようにできます。
■コンパイルと実行
コマンドプロンプト

C:\JavaHello\Properties>javac HelloWorldGetProperties.java

C:\JavaHello\Properties>java HelloWorldGetProperties
メッセージ:Hello World
URL:http://www.hellohiro.com/

C:\JavaHello\Properties>

おおおお!値が取得できましたね!
 
◆プロパティファイルに書き込むプログラムの作成
プロパティファイルに「キー=値」のデータを上書きしたり新規に追加したりできます。
■プロパティファイルから値を読み込んで新しい値を書き込むソース
HelloWroldSetProperties.java(ここからダウンロード)
import java.util.*;
import java.io.*;

public class HelloWorldSetProperties {
  public static void main(String[] args) {
    try {
      Properties prop = new Properties();
      // プロパティファイルからキーと値のリストを読み込みます
      prop.load(new FileInputStream("javahello.properties"));
      // "javahello.message"に新しい値を設定します(上書き)
      prop.setProperty("javahello.message" , "Hola Mundo");
      // "javahello.since"に値を設定します(新規追加)
      prop.setProperty("javahello.since" , "2002/02/03");
      // プロパティのリストをファイルに保存します
      prop.store(new FileOutputStream("javahello.properties"), "javahello properties");
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}
 
■コンパイルと実行
コマンドプロンプト

C:\JavaHello\Properties>javac HelloWorldSetProperties.java

C:\JavaHello\Properties>java HelloWorldSetProperties

C:\JavaHello\Properties>

実行できたのでプロパティファイルの中身を見てみましょう。
javahello.properties
#javahello properties
#Thu Nov 24 22:29:56 JST 2002
javahello.since=2002/02/03
javahello.url=http://www.hellhiro.com/
javahello.message=Hola Mundo
おおおお!"javahello.message"の値が新しい値に書き換わって、新規に"javahello.since"とういうプロパティが作られてますね!
 
◆実用性のあるプログラムの作成
実用性のあるプログラムを作成したいと思います。JDBC編JDBC(MySQL)編JDBC(PostgreSQL)編の全てで使用できるソースを作ります。ドライバクラス、データベースのURL、データベースに接続するユーザー名、パスワード、を外部のプロパティファイルに持ちます。こうすればデータベースが変わってもプロパティファイルだけ変更するだけで、プログラムのソースを変更して再度コンパイルしなくてもすみます。
■プロパティファイルの作成
javahellojdbc.properties(ここからダウンロード)
javahello.jdbc.driver=sun.jdbc.odbc.JdbcOdbcDriver
javahello.jdbc.url=jdbc:odbc:helloworld
javahello.jdbc.user=
javahello.jdbc.password=
■プログラムの作成
HelloWorldAJDBC(ここからダウンロード)
import java.sql.*;
import java.io.*;
import java.util.*;

public class HelloWorldAJDBC {
  public static void main(String[] args) {
    try {
      Properties prop = new Properties();
      // プロパティファイルからキーと値のリストを読み込みます
      prop.load(new FileInputStream("javahellojdbc.properties"));
      // 値を取得します
      String driver = prop.getProperty("javahello.jdbc.driver");
      String url = prop.getProperty("javahello.jdbc.url");
      String user = prop.getProperty("javahello.jdbc.user");
      String password = prop.getProperty("javahello.jdbc.password");

      // ドライバクラスをロード
      Class.forName(driver);
      // データベースへ接続
      Connection con = DriverManager.getConnection(url,user,password);
      // ステートメントオブジェクトを生成
      Statement stmt = con.createStatement();
      String sql = "SELECT * FROM HELLO_WORLD_TABLE";
      // クエリーを実行して結果セットを取得
      ResultSet rs = stmt.executeQuery(sql);
      // 検索された行数分ループ
      while(rs.next()){
        // NOを取得
        int no = rs.getInt("NO");
        // 言語を取得
        String lang = rs.getString("LANGUAGE");
        // メッセージを取得
        String msg = rs.getString("MESSAGE");
        // 表示
        System.out.println(no + " " + lang + " " + msg);
      }
      // データベースから切断
      stmt.close();
      con.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}
 
 
■コンパイルと実行
コマンドプロンプト

C:\JavaHello\Properties>javac HelloWorldAJDBC.java

C:\JavaHello\Properties>java HelloWorldAJDBC
1 日本語 こんにちは 世界
2 英語 Hello World

C:\JavaHello\Properties>

おおお!実行されましたね!
 
■PostgreSQL用にプロパティファイルの変更
プロパティファイルを以下のように変更するとソースを変更することなしにJDBC(PostgreSQL)編で使えるようになります。
javahellojdbc.properties
javahello.jdbc.driver=org.postgresql.Driver
javahello.jdbc.url=jdbc:postgresql:hellodb
javahello.jdbc.user=postgres
javahello.jdbc.password=
■MySQL用にプロパティファイルの変更
プロパティファイルを以下のように変更するとソースを変更することなしにJDBC(MySQL)編で使えるようになります。
javahellojdbc.properties
javahello.jdbc.driver=org.gjt.mm.mysql.Driver
javahello.jdbc.url=jdbc:mysql:///hellodb?useUnicode=true&characterEncoding=SJIS
javahello.jdbc.user=
javahello.jdbc.password=
便利ですね!
 
■関連
JDBC編
JDBC(MySQL)編
JDBC(PostgreSQL)編
■書籍
Java関連の書籍

 
  ネットで買えば断然お得!お買い物なら楽天市場
ツールの部屋 - Java関連の書籍 - デザインパターン - 情報交換掲示板 - HOME