使用Java加载属性文件

时间:2011-11-21 05:47:09

标签: java properties

每当我尝试通过以下方法加载属性文件时。我在getClass()上收到了错误 -

  

无法从Object

类型对非静态方法getClass()进行静态引用
public static void main(String[] args) {

        ---
        ---

    loadProperties(line);

}

private static void loadProperties(String line) {
        Properties prop = new Properties();
        InputStream in = getClass().getResourceAsStream("foo.properties");
        try {
            prop.load(in);
            for(Object str: prop.keySet()) {
                Object value = prop.getProperty((String) str);
                System.out.println(str+" - "+value);
            }
            in.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


    }

任何建议我如何克服这一点。

4 个答案:

答案 0 :(得分:4)

您无法从静态方法调用getClass。您需要以非静态方法执行此操作:

class MyClass {
   public static void main(String[] args) {
      MyClass obj = new MyClass();
      obj.loadProperties(line);    
   }

   private void loadProperties(String line) {
        Properties prop = new Properties();
        InputStream in = getClass().getResourceAsStream("foo.properties");
        ...  
   }
}

或使用类文字,它在静态上下文中起作用,例如

InputStream in = MyClass.class.getResourceAsStream("foo.properties");

答案 1 :(得分:2)

从静态方法usign访问项目类路径中的属性文件  getClass尝试:

import java.io.InputStream;
import java.util.Properties;
import java.io.IOException;
public class HelperClass {
     public static String getProperty() {
        Properties properties = new Properties();
        String wadlURI = "";
           try {
               InputStream inputStream = HelperClass.class.getClassLoader().getResourceAsStream("configuration.properties");
                properties.load(inputStream);
               wadlURI = properties.getProperty("wadlurl");
           } catch (IOException e) {
               e.printStackTrace();
             }
          return wadlURI;
      }
}

答案 2 :(得分:0)

我在IntelliJ IDEA中遇到了相同的问题,并且遵循相同的步骤。但是我没有将资源文件夹标记为“ Resource Root”。完成后,问题为我解决了。

答案 3 :(得分:0)

要访问属性文件并将其加载到应用程序中,可以使用以下命令。

public static void loadPropertiesToMemory() {
    Properties prop = new Properties();
    InputStream input = null;
    String filePathPropFile = "configuration.properties";
    try {
        input = App.class.getClassLoader().getResourceAsStream(filePathPropFile);
        prop.load(input);
    } catch (IOException ex) {
        ex.printStackTrace();
    } 
}

App是此方法存在的类。