调用java属性类

时间:2012-11-03 05:13:14

标签: java properties

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

到目前为止,这是我的班级。我似乎无法启动财产负担。

所以我需要的是来自项目中的另一个类(当前变为null)

String 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();
}

2 个答案:

答案 0 :(得分: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");
        }
    }

现在,您只需将基本网址设置为:

    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"));
    }

答案 1 :(得分:0)

方法

public void TestProperties() throws Exception{

本来是构造函数,但不是一个,所以类只获取一个默认的无参数构造函数。将其更改为:

public TestProperties() throws Exception{

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