java - 通过 Servlet 设置属性

标签 java file servlets properties

我想通过 servlet 从 configures.properties 设置数据。 configures.properties 位于 WEB-INF/classes 中。这就是我获取数据的方式:

public static String getDbPassword() {
        Properties prop = new Properties();
        try {
            // load a properties file
            InputStream in = Configures.class.getResourceAsStream(INPUT_FILE);
            prop.load(in);

            // get the property value
            return prop.getProperty("dbPassword");

        } catch (IOException ex) {
            ex.printStackTrace();
        }
        return null;
    }

但是怎么设置呢?我是这样做的:

public static void setDbPassword(String str) {
            Properties prop = new Properties();
            try {
                //load a properties file
                InputStream in = Configures.class.getResourceAsStream(INPUT_FILE);
                prop.load(in);
                prop.setProperty("dbPassword", str);
                prop.store(new FileOutputStream(INPUT_FILE), null);

            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }

但在此之后我捕获了 java.io.FileNotFoundException。我认为它发生在 prop.store(new FileOutputStream(INPUT_FILE), null); 之后。我应该如何修改OutputStream

更新: 这是 INPUT_FILE 的样子:

private static final String INPUT_FILE = "/config.properties";

最佳答案

您的 INPUT_FILE 是一个资源路径,getResourceAsStream 将相对于类路径进行解析,但您随后试图将相同的字符串传递给 FileOutputStream 构造函数,它将尝试将其视为相对于文件系统根目录的绝对路径。这是两个不同的位置。

您可以使用 ServletContext.getRealPath("WEB-INF/classes"+ INPUT_FILE) 获取 FileOutputStream 所需的路径。

但这里更高层次的问题是,您不应该假设您的 Web 应用程序将对其 WEB-INF 具有写入权限,甚至该目录根本存在于磁盘上(例如,如果该应用程序直接从 WAR 运行,而不是从磁盘上解压的目录运行)。如果你想存储可以更改的配置数据,那么它应该放在一个已知位置的文件中 网络应用程序之外(这个文件的位置可以是一个初始化参数)你知道你将拥有读写权限。当您部署新版本的应用程序时,这也会阻止您的更改被覆盖。

关于java - 通过 Servlet 设置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22296729/

相关文章:

java - 在黑莓中读/写文件

java - Tomcat VS jetty

java - Java 中的八进制到文本

java - BitmapFactory解码()的Android位图是否包含透明信息?

c# - 重命名服务器目录中的图像文件

android - 检查 android raw 文件的 uri

java - 使用Java程序作为Java Web APP的一部分

java - 防止并发访问 servlet 中的方法

java - Spring OAuth2资源服务器,根据OAuth信息创建新用户

java - 将 float 操作按钮转换为 Android 中的 Activity