-1

需要创建一个类,我可以在其中加载属性并能够从该类中调用所需的属性。比如propertiesClass.getname();

到目前为止,这是我的课程。我似乎无法启动属性加载。

所以我需要的是项目中的另一个类来做(目前为空)

字符串 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

请确保您能够正确访问您的属性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从它中删除,因为它是一种方法。

最后,您可能希望testPropertiesTestProperties()构造函数中使用:

 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 回答
0

方法

public void TestProperties() throws Exception{

本来是构造函数,但不是构造函数,因此该类仅获得默认的无参数构造函数。将其更改为:

public TestProperties() throws Exception{

即删除返回类型,因为构造函数与普通方法的区别在于不声明返回类型。

于 2012-11-03T05:26:33.123 回答