java - 当我给出属性文件的相对路径时 FileNotFoundException

标签 java fileinputstream properties-file

我正在尝试使用属性文件来存储我的数据库连接详细信息。当我创建一个 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/

相关文章:

java - Spring Boot 具有更多上下文

java - 我需要在此代码中手动关闭 FileInputStream 吗?

java - 使用properties.load()时出现NullPointerException

properties-file - 如何覆盖 Quarkus 中的属性?

java - 我应该如何处理 catch block 中发生的异常?

java - 无法使用 Java 和 Apache POI 写入 Excel 文件

java - 如何在java中绘制颜色图?

java - FileInputStream 使用 read() 跳过整数 - Java

spring-boot - 将 LogStash Log4j 配置升级到 Log4j2

java - PropertiesFactoryBean 与 @PropertySource