Java 需要可更新的属性文件的位置
在我的JavaEEWeb应用程序中,我需要一个地方来放置属性文件,在那里我可以使用getResource()找到它,然后更新该文件 把它放在lib目录中似乎对tomcat不起作用。建议 应用程序是GXT需要有一个属性文件来保存国际化字符串。我需要从数据库表加载这些字符串。所以我必须在启动时创建属性文件。我正在创建一个空的,进入lib目录中的jar文件。然后我找到那个文件,用新的答案写下来。这一切都在jetty中起作用,但在tomcat中不起作用Java 需要可更新的属性文件的位置,java,jakarta-ee,tomcat,Java,Jakarta Ee,Tomcat,在我的JavaEEWeb应用程序中,我需要一个地方来放置属性文件,在那里我可以使用getResource()找到它,然后更新该文件 把它放在lib目录中似乎对tomcat不起作用。建议 应用程序是GXT需要有一个属性文件来保存国际化字符串。我需要从数据库表加载这些字符串。所以我必须在启动时创建属性文件。我正在创建一个空的,进入lib目录中的jar文件。然后我找到那个文件,用新的答案写下来。这一切都在jetty中起作用,但在tomcat中不起作用 谢谢。您不一定能够可靠地写入类路径位置,因为它可能
谢谢。您不一定能够可靠地写入类路径位置,因为它可能不代表本地磁盘文件系统路径。只能写入(绝对)磁盘文件系统位置 最好是有一个已知的固定磁盘文件系统位置,该位置也被添加到类路径中,这样您就可以使用
ClassLoader\getResource()
从类路径加载它,并使用FileOutputStream
将它写入本地磁盘文件系统
对于Tomcat,您可以通过/conf/catalina.properties
的shared.loader
属性将固定磁盘文件系统位置添加到类路径中。例如
shared.loader = /var/webapp/conf
将表示固定磁盘文件系统位置的属性添加到属性文件本身也可能很有用
my.location = /var/webapp/conf
这样你就可以把它理解为
Properties properties = new Properties();
properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("foo.properties");
和另存为
properties.store(new FileOutputStream(new File(properties.getProperty("my.location"), "foo.properties")));
另见:
- 您不一定能够可靠地写入类路径位置,因为它可能不代表本地磁盘文件系统路径。只能写入(绝对)磁盘文件系统位置
最好是有一个已知的固定磁盘文件系统位置,该位置也被添加到类路径中,这样您就可以使用
ClassLoader\getResource()
从类路径加载它,并使用FileOutputStream
将它写入本地磁盘文件系统
对于Tomcat,您可以通过/conf/catalina.properties
的shared.loader
属性将固定磁盘文件系统位置添加到类路径中。例如
shared.loader = /var/webapp/conf
将表示固定磁盘文件系统位置的属性添加到属性文件本身也可能很有用
my.location = /var/webapp/conf
这样你就可以把它理解为
Properties properties = new Properties();
properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("foo.properties");
和另存为
properties.store(new FileOutputStream(new File(properties.getProperty("my.location"), "foo.properties")));
另见:
但是我会建议使用,因为有不同的功能,包括在store()之后保持文件“用户可读”@Thom您想将此文件用于特定的web应用程序吗?@Thom您想将此文件用于特定的web应用程序吗?是的,但我正在确保我可以对其进行写入。我不确定是否理解您最后的评论。您是否知道您需要一个
FileOutputStream
来编写它?您是否了解,FileOutputStream
反过来需要一个固定的磁盘文件系统位置?我的回答说明了如何做到这一点。是的。这就是我遇到的问题。令人惊讶的是,WEB-INF/lib似乎不在类路径上。它肯定在类路径上。我现在只是对让你发表这些奇怪评论的具体问题越来越困惑。请详细说明这个具体问题。你的问题似乎根本没有涉及到这一点。到底是什么让您认为WEB-INF/lib不在类路径中?这在我回答的第一句话中有介绍:“您不一定能够可靠地写入类路径位置,因为它可能不代表本地磁盘文件系统路径”。例如,Tomcat可能将WAR提取到内存中,而不是本地磁盘文件系统上的某个文件夹中。你不能为内存中的文件创建FileOutputStream
,更不用说一个单独在JAR中的文件了(你必须先提取JAR,重新打包,然后让类加载器重新加载)。是的,但我确保我可以写入它。我不确定我是否理解你的上一条评论。您是否知道您需要一个FileOutputStream
来编写它?您是否了解,FileOutputStream
反过来需要一个固定的磁盘文件系统位置?我的回答说明了如何做到这一点。是的。这就是我遇到的问题。令人惊讶的是,WEB-INF/lib似乎不在类路径上。它肯定在类路径上。我现在只是对让你发表这些奇怪评论的具体问题越来越困惑。请详细说明这个具体问题。你的问题似乎根本没有涉及到这一点。到底是什么让您认为WEB-INF/lib不在类路径中?这在我回答的第一句话中有介绍:“您不一定能够可靠地写入类路径位置,因为它可能不代表本地磁盘文件系统路径”。例如,Tomcat可能将WAR提取到内存中,而不是本地磁盘文件系统上的某个文件夹中。您无法为内存中的文件创建FileOutputStream
,更不用说一个单独位于JAR中的文件了(您必须先提取JAR,重新打包,然后让类加载器重新加载它)。