LoginSignup
18
23

More than 5 years have passed since last update.

Java 任意の場所にpropertiesファイルを配置

Last updated at Posted at 2016-02-04

はじめに

propertiesファイルを配置する際、
Webアプリケーションでは以下のような事例が多いかもしれません。

コンテキストパス/WEB-INF/classes/foo.properties

テスト環境、本番環境で内容の異なるpropertiesファイルを配置したい場合、上記の例では何かと面倒が増えます。
jarファイルで配置する際にはテスト用と本番用とでjarファイルを作り直す必要がありますし...。

こういったケースではアプリケーション配布時にpropertiesファイルを含めないようにし、
任意の場所(=クラスパス外)に配置したpropertiesファイルを読み込むようにして解決しています。

事前に準備する外部ライブラリ等はありません。

読み込むpropertiesは以下のファイルを使います。

/var/taro/conf/foo.properties
key1=value1
key2=value2
key3=value3

実装例

サンプルでは、動作確認しやすいようにmainメソッドで実行できるようにしてあります。

ResourceBundleTest.java
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Enumeration;
import java.util.Locale;
import java.util.ResourceBundle;

/**
 *
 * @author tool-taro.com
 */
public class ResourceBundleTest {

    public static void main(String[] args) throws MalformedURLException {

        //propertiesファイル配置ディレクトリ
        String dir = "/var/taro/conf";
        //propertiesファイル名(.propertiesは不要)
        String source = "foo";

        //取得処理
        URLClassLoader urlLoader = new URLClassLoader(new URL[]{new File(dir).toURI().toURL()});
        ResourceBundle bundle = ResourceBundle.getBundle(source, Locale.getDefault(), urlLoader);
        Enumeration keys = bundle.getKeys();
        String key, value;
        while (keys.hasMoreElements()) {
            key = (String) keys.nextElement();
            value = bundle.getString(key);
            if (value != null) {
                //標準出力
                System.out.format("%1$s=%2$s\n", key, value);
            }
        }
    }
}

動作確認

$ javac ResourceBundleTest.java
$ java ResourceBundleTest
$ key1=value1
key2=value2
key3=value3

環境

  • 開発

    • Windows 10 Pro
    • JDK 1.8.0_112
    • NetBeans IDE 8.2
  • 動作検証

    • CentOS Linux release 7.2
    • JDK 1.8.0_112

Webツールも公開しています。
Web便利ツール@ツールタロウ

18
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
23