У меня есть файл свойств в моей программе Java, который хранит несколько значений. В окне настроек пользователь может редактировать эти значения и сохранять изменения в следующий раз, когда запускает программу.Изменения в файле свойств не сохраняются внутри JAR-файла
Вот код, который загрузить свойства формируют свойства файла:
public class AppProperties {
private final static AppProperties appProperties = new AppProperties();
private static Properties properties;
private final static String preferencesSourcePath = "/res/pref/Properties.properties";
private AppProperties() {
properties = new Properties();
try {
properties.load(getClass().getResourceAsStream(preferencesSourcePath));
} catch (IOException e) {
e.printStackTrace();
}
}
И вот, метод, который сохранить свойства в файле свойств (в том же классе):
public static void saveAppPropertiesFile() {
try {
OutputStream outputStream = new FileOutputStream(new File(AppProperties.class.getResource(preferencesSourcePath).getPath()));
properties.store(outputStream, null);
} catch (IOException e) {
e.printStackTrace();
}
}
}
I попробовали эту функцию, она отлично справляется с этой работой, когда я нахожусь в своей среде разработки, но она не работает, когда я запускаю файл JAR. Фактически, он работает для текущей сессии, но не сохраняется в файле JAR.
В консоли, это сказать:
java.io.FileNotFoundException: file:\C:\Users\HP\HEIG\EcoSimSOO\out\artifacts\EcoSimSOO_jar\EcoSimSOO.jar!\res\pref\Properties.properties (La syntaxe du nom de fichier, de répertoire ou de volume est incorrecte)
at ...
at res.pref.AppProperties.saveAppPropertiesFile(AppProperties.java:31)
Это место, где я пытаюсь сделать это:
AppProperties.class.getResource(preferencesSourcePath)
Я прочитал this post, но я не понимаю проблему и то, что я должен сделайте это, чтобы исправить это ...
Благодарим за помощь.
jar взять относительный путь, в то время как в IDE используется абсолютный путь, почему вы не можете найти путь – SarthAk
попробуйте распечатать путь new File (AppProperties.class.getResource (preferencesSourcePath) .getPath()) – SarthAk
также добавьте, откуда вы запущены банки – SarthAk