-1

プロパティをロードして、そのクラスから必要なプロパティを呼び出すことができるクラスを作成する必要があります。propertiesClass.getname(); など。

これまでの私のクラスは次のとおりです。プロパティの読み込みを開始できないようです。

だから私が必要とするのは、プロジェクト内の別のクラスから実行することです(現在nullを取得しています)

文字列 url = TestProperties.getBaseUrl();

*クラスを更新しました。現在の様子は次のとおりです。

    public class TestProperties {

    private static Properties testProperties;
    private static String instanceUrl;

    public TestProperties() throws Exception{

         loadProperties();
         getInstanceProperties();
         instanceUrl =  TestProperties.testProperties.getProperty("confluence.base.url","");
    }

    public static String getBaseUrl(){

          return instanceUrl;
    }


    private void loadProperties() throws IOException {
        InputStream testPropertiesInput = this.getClass().getClassLoader().getResourceAsStream("smoketest.properties");
        TestProperties.testProperties = new Properties();

//        if (null != testProperties) {
            try{
                TestProperties.testProperties.load(testPropertiesInput);
            } finally {
                IOUtils.closeQuietly(testPropertiesInput);
            }
//        }
     }

}


my otherclass(){
 String myurl = TestProperties.getBaseUrl();
}
4

2 に答える 2

0

方法

public void TestProperties() throws Exception{

コンストラクターであることが意図されていましたが、コンストラクターではないため、クラスはデフォルトの引数のないコンストラクターのみを取得します。それを次のように変更します。

public TestProperties() throws Exception{

つまり、コンストラクターは戻り値の型を宣言しないことで通常のメソッドと区別されるため、戻り値の型を削除します。

于 2012-11-03T05:26:33.123 に答える
0

smoketest.propertiesただし、プロパティ ファイルに正しくアクセスできることを確認してくださいInputStream testPropertiesInput

編集:

ローカル変数を再定義しloadPropertiesて返す必要はありません。次のように非常に簡単に記述できます。

   private static void loadProperties() throws IOException {
       InputStream testPropertiesInput = getClass().getClassLoader()
                                     .getResourceAsStream("smoketest.properties");
       Properties testProperties = new Properties();
       try{
            TestProperties.testProperties.load(testPropertiesInput);
        } finally {
            IOUtils.closeQuietly(testPropertiesInput);
        }
        TestProperties.testProperties = testProperties;
    }

public void TestProperties() throws Exception{あなたのクラスのコンストラクターだと思います。はいの場合voidは、メソッドとして作成しているため、削除してください。

最後に、コンストラクターで次のように使用することができtestPropertiesますTestProperties()

 public TestProperties() throws Exception{
     loadProperties();
     getInstanceProperties();
     instanceUrl = TestProperties.testProperties
                                            .getProperty("confluence.base.url","");
  }

注: クラス変数を として定義する必要はないと思いますstatic。そうする理由はありますか?

編集:これはうまくいくと思われるサンプルコードです:

    public class TestProperties {

        private static Properties testProperties;
        private static String instanceUrl;

        public TestProperties(){
            try{
                loadProperties();
                //getInstanceProperties();
                instanceUrl = TestProperties.testProperties
                                        .getProperty("confluence.base.url","");
               }catch(IOException ioe){
                 ioe.printStackTrace();
               }
        }

        static{
             //Just to initialize the properties
             new TestProperties();
        }        

        private void loadProperties() throws IOException {
          InputStream testPropertiesInput = getClass().getClassLoader()
                                .getResourceAsStream("smoketest.properties");
          Properties testProperties = new Properties();
          try{
              testProperties.load(testPropertiesInput);
          } finally {
               IOUtils.closeQuietly(testPropertiesInput);
          }
          TestProperties.testProperties = testProperties;
        }

        public static String getBaseUrl(){
              return instanceUrl;
        }

        public static String getPropertyValue(String key){
              return TestProperties.testProperties.getProperty(key,"Not Found");
        }
    }

これで、次のようにどこでもベース URL を簡単に取得できます。

    public static void main(String[] args) {
        System.out.println(TestProperties.getBaseUrl());
        System.out.println(TestProperties.getPropertyValue("confluence.base.url"));
        System.out.println(TestProperties.getPropertyValue("test.property"));
    }
于 2012-11-03T05:15:08.733 に答える