[解決済み] JARファイル外のプロパティファイルの読み込み
質問
私は、実行するためにすべての私のコードがアーカイブされているJARファイルを持っています。私は、各実行の前に変更/編集する必要があるプロパティ ファイルにアクセスする必要があります。私は、JARファイルがあるのと同じディレクトリにプロパティファイルを維持したい。そのディレクトリからプロパティファイルをピックアップするようにJavaに指示する方法はありますか?
注:私は、プロパティファイルをホームディレクトリに保持したり、コマンドライン引数でプロパティファイルのパスを渡したりしたくありません。
どのように解決するのですか?
ということで
.properties
ファイルを main/runnable jar のリソースとしてではなく、ファイルとして扱いたいのですね。その場合、私なりの解決策は以下のようになります。
まず最初に、プログラムファイルのアーキテクチャは次のようになります (メインプログラムが main.jar で、そのメインプロパティファイルが main.properties だと仮定しています)。
./ - the root of your program
|__ main.jar
|__ main.properties
このアーキテクチャでは、main.properties ファイルは単なるテキストベースのファイルなので、main.jar の実行前または実行中に(プログラムの現在の状態に応じて)任意のテキスト エディタを使用してプロパティを変更することができます。例えば、main.properties ファイルには以下のようなものがあります。
app.version=1.0.0.0
app.name=Hello
そこで、メインプログラムをそのルート/ベースフォルダから実行すると、通常はこのように実行されます。
java -jar ./main.jar
または、ストレートに
java -jar main.jar
main.jar では、main.properties ファイルにあるすべてのプロパティに対して、いくつかのユーティリティ・メソッドを作成する必要があります。
app.version
プロパティには
getAppVersion()
メソッドを次のように使用します。
/**
* Gets the app.version property value from
* the ./main.properties file of the base folder
*
* @return app.version string
* @throws IOException
*/
import java.util.Properties;
public static String getAppVersion() throws IOException{
String versionString = null;
//to load application's properties, we use this class
Properties mainProperties = new Properties();
FileInputStream file;
//the base folder is ./, the root of the main.properties file
String path = "./main.properties";
//load the file handle for main.properties
file = new FileInputStream(path);
//load all the properties from this file
mainProperties.load(file);
//we have loaded the properties, so close the file handle
file.close();
//retrieve the property we are intrested, the app.version
versionString = mainProperties.getProperty("app.version");
return versionString;
}
メインプログラムの中で
app.version
の値を必要とするメインプログラムのどの部分でも、次のようにそのメソッドを呼び出します。
String version = null;
try{
version = getAppVersion();
}
catch (IOException ioe){
ioe.printStackTrace();
}
関連
-
Android Studio 3.1.2 で v4, v7 パッケージが見つからない シンボル 'AppCompatActivity' を解決できない
-
このラインで複数のマーカーを解決する方法
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] Mavenを使用して、依存関係を持つ実行可能なJARを作成するにはどうすればよいですか?
-
[解決済み] JavaScriptでオブジェクトのキー/プロパティの数を効率的にカウントする方法
-
[解決済み] Mavenプロジェクトにローカルのjarファイルを追加する方法は?
-
[解決済み] 実行中のJARファイルのパスを取得する方法は?
-
[解決済み】C#には拡張プロパティがある?
-
[解決済み】マニフェストファイルにあるメインクラスではないクラスをJarから実行する方法
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ファインバグタイプ
-
Spring Boot による HTTPS アクセスの設定
-
Javaクラスローダーにソースコードから潜り込む
-
Eclipse起動エラー:javaは起動したが、終了コード=1を返した(ネット上の様々な落とし穴)
-
Error: java.lang.NoClassDefFoundError: クラス XXXX を初期化できませんでした
-
SocketTimeoutExceptionです。読み込みがタイムアウトしました
-
IDEA パッケージステートメントの欠落
-
maven プラグイン エラー プラグインの実行は、ライフサイクル構成ソリューションの対象外です。
-
[解決済み] 実行中のJARファイルのパスを取得する方法は?
-
[解決済み】javaクラスがどこからロードされるかを探す