所以我在 4 年后重新开始编写 Java,所以请原谅任何“菜鸟”错误。
我需要一个属性文件,我可以在其中存储我的应用程序的一些简单数据。应用程序数据本身不会驻留在此处,但我将存储信息,例如上次使用的数据存储的文件路径、其他设置等。
我设法连接到属性文件,该文件与尝试连接到它的类文件位于同一个包内,我可以读取该文件,但无法写回该文件。我很确定我的代码可以工作(至少它没有抛出任何错误)但是在 Netbeans 中运行应用程序后,更改不会反射(reflect)在文件本身中。
在上图中,您可以看到有问题的 mainProperties.properties 文件和试图调用它的类 (prefManagement.java)。因此,考虑到这一点,这是我加载文件的代码:
Properties mainFile = new Properties();
try {
mainFile.load(prefManagement.class.getClass().getResourceAsStream("/numberAdditionUI/mainProperties.properties"));
} catch (IOException a) {
System.out.println("Couldn't find/load file!");
}
这有效,我可以检查并确认一个现有 key (默认 XMLPath)。
我要添加到此文件的代码是:
String confirmKey = "defaultXMLPath2";
String propKey = mainFile.getProperty(confirmKey);
if (propKey == null) {
// Key is not present so enter the key into the properties file
mainFile.setProperty(confirmKey, "testtest");
try{
FileOutputStream fos = new FileOutputStream("mainProperties.properties");
mainFile.store(fos, "testtest3");
fos.flush();
}catch(FileNotFoundException e ){
System.out.println("Couldn't find/load file3!");
}catch(IOException b){
System.out.println("Couldn't find/load file4!");
}
} else {
// Throw error saying key already exists
System.out.println("Key " + confirmKey + " already exists.");
}
正如我在上面提到的,一切运行都没有任何错误,我可以试着添加现有的 key ,它会抛出预期的错误。但是当尝试添加一个新的键/值对时,它不会出现在属性文件后记中。为什么?
最佳答案
您不应该尝试写入存在于 jar 文件中的"file"。实际上,从技术上讲,jar 文件不保存文件,而是保存“资源”,并且出于实际目的,它们是只读的。如果您需要读取和写入属性文件,它应该在 jar 之外。
关于java - 读取/写入 jar 文件中的属性文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24728566/