每当我尝试通过以下方法加载属性文件时。我在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();
}
}
任何建议我如何克服这一点。
答案 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
是此方法存在的类。