プログラム実行中にリソースファイルを再読み込みするロジックを以下に示す
リソースファイルはc:propertiesに保管している
・実行結果
リソースファイルはc:propertiesに保管している
import java.net.URL; import java.net.URLClassLoader; import java.util.Locale; import java.util.ResourceBundle; public class Main { public void getValueFormLocalResource() throws Exception{ int count = 0; do{ System.out.println("プログラム実行中に読み込まれたリソース:" +readResourceFromLocal().getString("key")); Thread.sleep(10000); count++; }while(count < 3); } private ResourceBundle readResourceFromLocal()throws Exception{ //リソースバンドルをクラスパス上にロードする URLClassLoader loader = new URLClassLoader( new URL[] { new URL("file:c:properties"), } ); //loader.loadClass("Sample");←ClassNotFoundExceptionが発生する return ResourceBundle.getBundle("Sample", Locale.getDefault(),loader); } }
プログラム実行中に読み込まれたリソース:test4
プログラム実行中に読み込まれたリソース:test5←リソースファイルの中身を変更
プログラム実行中に読み込まれたリソース:test5
プログラム実行中に読み込まれたリソース:test5←リソースファイルの中身を変更
プログラム実行中に読み込まれたリソース:test5
(ポイント)
(参考サイト)
- URLClassLoaderを用いてクラスパスにリソースファイルをロードする
- URLClassLoader.loadClassメソッドで読み込もうとすると、"ClassNotFoundException"が発生する。ゆえにクラスローダーの指定は "ResourceBundle#getBundle(String baseName, Locale locale, ClassLoader loader)"で行う
(参考サイト)