我正在尝试编写一个方法,该方法将使用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方法似乎不起作用。有人可以解释为什么这不起作用,以及我需要做些什么来使它工作?
由于
答案 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的形式,你也不应该真正尝试做你正在做的事情。不幸的是,无论如何这是不可能的 - 正如我在无数次尝试后发现的那样!
但是,很高兴听到错误究竟是什么。例如,你有没有发现任何例外?