Java:在类路径上加载和编辑属性文件

时间:2014-10-30 15:59:15

标签: java properties classpath

我想将一些属性保存到property-file,以防它们在程序运行期间被更改。现在我想这样做:

Properties properties = new Properties();

    try (FileInputStream in = new FileInputStream("classpath:app.properties")) {
        properties.load(in);
    } catch (IOException e) {
        logger.error("", e);
    }

    properties.setProperty("word", "abc");

    try (FileOutputStream out = new FileOutputStream("classpath:app.properties")) {
       properties.store(out, null);
    } catch (IOException e) {
        logger.error("", e);
    }

但它似乎不起作用。我做错了什么?

3 个答案:

答案 0 :(得分:3)

为了能够读取和写入resources文件夹中的属性文件(在标准maven项目结构中),您可以使用:

// of course, do not forget to close the stream, after your properties file has been read.
properties.load(Runner.class.getClassLoader().getResourceAsStream("app.properties"));

修改属性文件后,可以使用以下内容:

Runner.class.getClassLoader().getResource("app.properties").getFile()

获取文件的绝对路径。

P.S。只是为了确保你正在检查正确的文件。您不应该检查resources文件夹中的文件。修改后的文件将与您的类一起放在根文件夹中,例如targetout

答案 1 :(得分:1)

如果文件与您的程序位于同一目录中,则您不需要类路径部分。

Properties properties = new Properties();

try (FileInputStream in = new FileInputStream("app.properties")) {
    properties.load(in);
} catch (IOException e) {
    logger.error("", e);
}

properties.setProperty("word", "abc");

try (FileOutputStream out = new FileOutputStream("app.properties")) {
   properties.store(out, null);
} catch (IOException e) {
    logger.error("", e);
}

否则如果文件在你的jar中,你将不得不重新包装jar

答案 2 :(得分:0)

如果你想坚持通过类路径处理属性文件 - 你当然可以使用下面的代码,我认为这是在类路径中处理文件的最简单方法 - 读写目的

BEGIN
IF (:REMAINING IS NULL) THEN
:REMAINING=:MONTHLY-:FEE;
NEXT_ITEM;
:MONTHLY:=:REMAINING;
END IF;
END;