我在Wildfly应用程序服务器上加载属性,如下所示:
public String getPropertyValue(String propertyName) throws IOException {
InputStream inputStream;
Properties properties = new Properties();
inputStream = getClass().getClassLoader().getResourceAsStream(propertyFileName);
if (inputStream != null) {
properties.load(inputStream);
} else {
throw new FileNotFoundException("property file '" + propertyFileName + "' not found in the classpath");
}
inputStream.close();
String property = properties.getProperty(propertyName);
LOG.debug("Property {} with value {} loaded.", propertyName, property);
return property;
}
现在我想写同一个文件。我该怎么做?我尝试使用新的File(configurationFileName),但是在另一个目录中创建了一个新文件,我尝试使用classloader中的文件的URL / URI,但这似乎也不起作用。这样做的正确方法是什么? 求救!
答案 0 :(得分:1)
你不可以,但你不应该这样做。我会使用数据库表来存储和加载属性。或者如果它应该是属性文件,则通过文件路径将其存储在外部,但不能通过类路径存储。
答案 1 :(得分:0)
try (FileOutputStream out = new FileOutputStream(new File( getClass().getClassLoader().getResource(propertyName).toURI()))){
properties.store(out,"My Comments);
}
答案 2 :(得分:0)
Raoul Duke实际上是正确的,通过文件执行属性会引发很多问题。我很快就会切换到DB来保存它们。与此同时,我这样做:当我写属性时,它们被写入新创建的文件。当我阅读属性时,我加载了#34; old"一个,然后创建一个新的属性对象,旧的属性对象作为默认值,然后我加载新文件。
private Properties loadProperties() throws IOException {
InputStream inputStream;
Properties defaultProperties = new Properties();
inputStream = getClass().getClassLoader().getResourceAsStream(defaultPropertyFileName);
if (inputStream != null) {
defaultProperties.load(inputStream);
} else {
throw new FileNotFoundException("Property file '" + defaultPropertyFileName + "' not found in the classpath");
}
inputStream.close();
Properties allProps = new Properties(defaultProperties);
try {
allProps.load(new FileInputStream(new File(updatedPropertyFileName)));
} catch (IOException ex) {
LOG.error("Error loading properties: {}", ex.toString());
return defaultProperties;
}
return allProps;
}
我的答案是正确的,因为我在技术上并没有写入我想要的文件,而且这只是一种解决方法,他的解决方案更好更清洁。