这是你的选择。基本上有三种方式:
把它放在类路径中,这样你就可以通过ClassLoader#getResourceAsStream()使用类路径相对路径来加载它:
Properties properties = new Properties();
properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("filename.properties"));
这里 filename.properties 应该被放置在 webapp 的默认类路径所覆盖的根目录之一中,例如Webapp/WEB-INF/lib、Webapp/WEB-INF/classes、Appserver/lib 或 JRE/lib。如果属性文件是特定于 webapp 的,最好将其放在 WEB-INF/classes 中。如果您在 IDE 中开发项目,也可以将其放在 src 文件夹(项目的源文件夹)中。
您也可以将其放在默认类路径之外的某个位置,并将其路径添加到应用服务器的类路径中。例如在 Tomcat 中,您可以将其配置为 Tomcat/conf/catalina.properties 的 shared.loader 属性。
2.) 将它放在 web 文件夹(项目的 web 内容文件夹)中的某个位置,以便您可以通过 ServletContext#getResourceAsStream() 使用 webcontent-relative 路径加载它:
Properties properties = new Properties();
properties.load(getServletContext().getResourceAsStream("/WEB-INF/filename.properties"));
请注意,我已经演示了将文件放在/WEB-INF 文件夹中,否则任何网络浏览器都可以公开访问它。另请注意,ServletContext 位于任何 HttpServlet 类中,只能由继承的 GenericServlet#getServletContext() 访问。
3.) 将它放在本地磁盘文件系统的某个位置,以便您可以使用通常的java.io 方式使用本地磁盘文件系统的绝对路径加载它:
Properties properties = new Properties();
properties.load(new FileInputStream("/absolute/path/to/filename.properties");
这里有很多不同的方法,但这取决于您的需要:
要从$TOMCAT_HOME/conf directory 加载属性文件,您需要使用java.io.File 对象访问它,因为类加载器(如this.getClass().getClassLoader().getResourceAsStream(...) 中仅能够从您的类路径加载文件(和类)(在WEB-INF/classes、WEB-INF/lib 或 $TOMCAT_HOME/lib)。
从Tomcat's config directory 加载文件的最简单示例是:
File configDir = new File(System.getProperty("catalina.base"), "conf");
File configFile = new File(configDir, "myconfig.properties");
InputStream stream = new FileInputStream(configFile);
Properties props = new Properties();
props.load(stream);