2017-05-15 12 views
0

私が作業しているパッケージから.JARを作成しようとしていて、問題が発生しました。私は、ユーザーがプログラムが実行されるプロパティを変更できるようにしたい。jarを実行しているときにプロパティファイルを上書きする

マイパッケージのフォルダ構造は次のようになります。

├───src 
│ ├───main 
│ │ ├───java 
(...) 
│ │ └───resources 
│ │   dbinterface.properties 

と私はdbinterface.propertiesはjarファイルと同じフォルダ内のユーザーの場所その1(またはそれと並んで./configフォルダ内にファイルを上書きしたいです)。

私は.をMANIFEST.MFのクラスパスに追加しようとしましたが、残念ながらそれは機能しませんでした。

+0

どのようにプロパティファイルを読み込みますか? –

+0

configsは次の行にロードされます: 'List configs = Arrays.asList(新しいResourceBundle [] {ResourceBundle.getBundle(" oracle ")、ResourceBundle.getBundle(" dbinterface ")})' ' dbinterface.propertiesファイルのみをオーバーライドします。 – padrino

答えて

2

プロパティファイルの読み込みメソッドでこのような動作を実装します。最初に、ユーザーが作成できる場所でプロパティファイルを読み込み、見つからない場合は元のデフォルトファイルにフォールバックすることができます。ような何か:

FileInputStream propFile; 
try { 
    propFile = new FileInputStream(new File("dbinterface.properties")); 
} catch (FileNotFoundException e) { 
    propFile = new FileInputStream(new File("resources/dbinterface.properties")); 
} 
Properties p = new Properties(); 
p.load(propFile); 
propFile.close(); 
+0

これは私の心を越えましたが、可能な限り、私はこれを避けたいと思います。 Mavenを使ってパッケージをインポートし、 'dbinterface.properties'を自分のresourcesフォルダに追加すると動作しますので、私のコードからjarファイルをビルドした後もこれが可能かどうか疑問に思っています。 – padrino

1

ストアユーザーに最高の場所編集可能なプロパティホームユーザーがディレクトリです。 Javaでは、システムに依存しないユーザのホームへのアクセスがSystem.getProperty("user.home")によって行われています。これは、Linuxでは/home/$USER、Windowsでは%USERPROFILE%を指します。他のすべてのOSもサポートされています。

まず、ユーザーが作成できる場所でプロパティファイルを読み込み、見つからない場合は元のデフォルトファイルにフォールバックできます。 - Galcoholic

私はこれを避けたいと思います。 - パッドリノ

なぜですか?

  • は、最初のプロパティは、あなたがあなたのプログラムでdeleveredファイルを読み取り、その後、
  • (しよう)ユーザーがnew File(System.getProperty("user.home"),".myProgram/dbinterface.properties") から変更した設定を読み込む(基本的には次のとおりです。

    これが最善のアプローチであります@Galcoholicによって提案されているように別の方法で)

Propertiesクラスを使用してJVMからロードすると、設定が自動的にマージされます。

関連する問題