需要可以更新的属性文件的位置

时间:2012-11-09 17:04:16

标签: java java-ee tomcat

在我的Java EE Web应用程序中,我需要一个地方将我的属性文件放在我可以使用getResource()找到它的位置,然后更新该文件。

将它放在lib目录中似乎不适用于tomcat。建议?

应用程序是GXT需要有一个属性文件来保存国际化字符串。我需要从数据库表中加载这些字符串。所以我必须在启动时创建属性文件。我正在创建一个空的,进入lib目录中的jar文件。然后我找到该文件并用新答案写入。这一切都在码头工作,但不是在tomcat。

感谢。

2 个答案:

答案 0 :(得分:3)

您不一定可靠地写入类路径位置,因为它可能不代表本地磁盘文件系统路径。您只能写入(绝对)磁盘文件系统位置。

最好是拥有一个已知的固定磁盘文件系统位置,该位置又添加到类路径中,这样您就可以使用ClassLoader#getResource()从类路径加载它并FileOutputStream写入它到本地磁盘文件系统。

对于Tomcat,您可以通过shared.loader的{​​{1}}属性将固定磁盘文件系统位置添加到类路径中。 E.g。

/conf/catalina.properties

将表示固定磁盘文件系统位置的属性添加到属性文件本身也可能很有用。

shared.loader = /var/webapp/conf

通过这种方式,您可以将其视为

my.location = /var/webapp/conf

另存为

Properties properties = new Properties();
properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("foo.properties");

另见:

答案 1 :(得分:0)

    //read properties    
    Properties prop = new Properties();
    ClassLoader loader = Thread.currentThread().getContextClassLoader();            
    InputStream stream = loader.getResourceAsStream("sample.properties");
    prop.load(stream);      
    //now save back, take as URL 
    java.net.URL f = loader.getResource("sample.properties");   
    File file = new File(f.getPath());
    OutputStream outstream = new FileOutputStream(file);
    prop.store(outstream, "");
    outstream.close();

但我会建议使用http://commons.apache.org/configuration/howto_properties.html,因为它有不同的功能,包括在store()之后保持文件“用户可读”