无法编辑通过Class.getResource()加载的属性文件

时间:2011-12-13 18:17:19

标签: java properties classloader

我正在尝试编写一个方法,该方法将使用Class.getResource()读取属性文件,更改其值并保存文件。

public void saveDBConnectionValues(String user, String password, String host, int port) throws IOException, URISyntaxException
{
    Properties dbProperties = new Properties();

    File f = new File(this.getClass().getResource("db.properties").toURI());

    BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(f))));     

    dbProperties.load(reader);

    reader.close();

    dbProperties.setProperty("user", user);
    dbProperties.setProperty("pw", password);
    dbProperties.setProperty("host", host);
    dbProperties.setProperty("port", Integer.toString(port));

    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f)))

    dbProperties.store(writer, null);

    writer.close();

}

我的db.properties文件已正确读取,但store方法似乎不起作用。有人可以解释为什么这不起作用,以及我需要做些什么来使它工作?

由于

3 个答案:

答案 0 :(得分:1)

资源和文件是两回事。资源从类加载器加载,并在类路径中找到。它可以从文件系统,jar或从套接字(或从任何其他位置,根据类加载器)加载。写入资源没有意义。

如果要读取/写入文件,请不要使用资源。使用文件流或读/写器。

答案 1 :(得分:0)

我在本地尝试了你的代码片段,但它确实有用。 只考虑是因为加载的资源是.class文件,您应该在那里查找属性文件而不是.java文件所在的位置。

找出你可以做到的路径

final FileOutputStream outStream = new FileOutputStream(f);
System.out.println(f.getAbsolutePath()); // <-- add this line

答案 2 :(得分:0)

在将代码导出到Jar时,您是否正在尝试此代码?因为如果你是,JAR是档案的一种形式,因此内容不容易修改。基本上,您将能够读取JAR中的文件,但不能写入。

因此,即使代码目前不是JAR的形式,你也不应该真正尝试做你正在做的事情。不幸的是,无论如何这是不可能的 - 正如我在无数次尝试后发现的那样!

但是,很高兴听到错误究竟是什么。例如,你有没有发现任何例外?