2009-03-15 1 views
1

は、次のコードの問題が修正されましたが、私は、データベース接続文字列を含むファイルを設定へできるようにしたい誰かが私の宿題のjarと同じレベルのjava参照ファイルを手伝ってくれますか?ない最も優雅な方法 - -

package six.desktop.gui.common; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.URL; 

public class Config 
{ 
    private static final String configFileName = "/config/config.ini"; 

    private Config() 
    { 

    } 

    public static String getPropertyValue(String propertyName) throws IOException 
    { 
     URL url = new Config().getClass().getResource(configFileName); 


     BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream())); 

     String inputline = ""; 
     while ((inputline = br.readLine()) != null) 
     { 
      if (inputline.contains(propertyName)) 
      { 
       int index = inputline.indexOf(propertyName); 
       index += propertyName.length() + 1; 

       return inputline.substring(index, inputline.length()); 
      } 
     } 
     return null; 
    } 
} 

この割り当てのための迅速な解決を必要としますは、ジャーと同じレベルに位置すること。どうすればこれを達成できますか?または私が欲しいものとは異なるアプローチがありますか?

私は、現時点ではちょうどにハードコードの接続を持っているDBハンドラクラスを持っている。

答えて

1

私はすぐに考えることができる3つのオプションがあります。最初に、Class.getResource()への呼び出しによって返されたURLの厄介なチェックを使ってjarファイルの名前を見つけて、完全修飾の設定ファイル名を調べます。

2番目のオプションは、ディレクトリパス自体をディレクトリパスに置き、Class.getResourceAsStream()またはClassLoader.getResourceAsStream()を使用してInputStreamというリソースを要求することです。

最後に、他の方法で設定ファイルの名前を渡すことができます。システムプロパティを介してファイルを読み込み、それに基づいてファイルを読み込みます。

私は第2のオプションが気に入っています。他のものとは別に、設定ファイルに発送することができます。設定ファイルを別のディレクトリに移動したい場合や、クラスパスを変更するだけです。後者は、設定ファイル名をシステムプロパティとして直接指定すると簡単になります。これが私の2番目の選択です。

+0

ダウンリスト:あなたが同意しない理由を説明するコメントを残してください。 –

4

このコードは...あなたから実行されているjarファイルのURIを取得します

private static URI getJarURI() 
    throws URISyntaxException 
{ 
    final ProtectionDomain domain; 
    final CodeSource  source; 
    final URL    url; 
    final URI    uri; 

    domain = Main.class.getProtectionDomain(); 
    source = domain.getCodeSource(); 
    url = source.getLocation(); 
    uri = url.toURI(); 

    return (uri); 
} 

あなたのためのスタートです。

4

、プロパティファイルはJARファイルと同じディレクトリにあることを意味し、「JARと同じレベル」により、極めて簡単な方法は、あなたがしようとしているものを達成する場合は、次のとおりです。

public class MyMain { 
    Properties props; 
    MyMain(Properties props) { 
     this.props = props; 
    } 

    public static void main(String[] args) 
     throws Exception 
    { 
     File f = new File("just_the_name.properties"); 
     FileInputStream fis = new FileInputStream(f); 
     Properties props = new Properties(); 
     props.load(fis); 
     // Now, you'll have your properties loaded from "just_the_name.properties" 
     MyMain mm = new MyMain(props); 
     // ... and do whatever you need to do ... 
    } 

また、個々のクラスメンバーに格納されているすべてのプロパティを含むクラスを使用することをお勧めします。

プロパティファイルがの中にある場合は、前の投稿が参考になります。

希望します。

関連する問題