我正在尝试使用属性文件来存储我的数据库连接详细信息。当我创建一个 Java 应用程序并给出文件名时,它就起作用了,因为我将属性文件放置在项目根文件夹中。
但是,当我在 Web 应用程序中尝试此操作时,我收到了 FileNotFoundException。我在项目节点下创建了一个 res 目录来保存属性文件。然后我将路径指定为“res/db.properties”,但出现异常。我也尝试将此文件放在配置文件目录下,但仍然遇到相同的异常。
这是我的代码 -
import java.io.FileInputStream;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.Properties;
/**
*
* @author aj
*/
public class getConfigValues {
public String[] getPropValues() {
String[] props = new String[4];
try {
Properties prop = new Properties();
String propFileName = "res/db.properties";
InputStream input = null;
input = new FileInputStream(propFileName);
prop.load(input);
props[0] = prop.getProperty("dbURL");
props[1] = prop.getProperty("driverClass");
props[2] = prop.getProperty("user");
props[3] = prop.getProperty("password");
return props;
} catch (FileNotFoundException ip) {
props[0] = "not found";
return props;
} catch (IOException i) {
props[0] = "IO";
return props;
}
}
}
我在这里做错了什么?
最佳答案
- 作为网络应用程序,您无法预测当前工作目录,因此使用相对路径总是会出现问题;
- 根据 Web 应用程序的打包方式,您的属性文件甚至可能不是文件系统对象。它很可能是隐藏在 .war 文件中的资源。
访问此文件的一种可靠方法是将其构建到 Web 应用程序的 WEB-INF 目录中。然后您可以使用 javax.servlet.ServletContext.getResourceAsStream("WEB-INF/res/db.properties") 访问它.
或者,您可以将其构建到 WEB-INF/classes 目录中并使用 java.lang.ClassLoader.getResourceAsStream("/res/db.properties") 加载它。 .
关于java - 当我给出属性文件的相对路径时 FileNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25724508/