2016-09-26 4 views
1

У меня есть файл свойств в моей программе 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, но я не понимаю проблему и то, что я должен сделайте это, чтобы исправить это ...

Благодарим за помощь.

+0

jar взять относительный путь, в то время как в IDE используется абсолютный путь, почему вы не можете найти путь – SarthAk

+0

попробуйте распечатать путь new File (AppProperties.class.getResource (preferencesSourcePath) .getPath()) – SarthAk

+0

также добавьте, откуда вы запущены банки – SarthAk

ответ

2

Вы не должны писать что-либо в файл JAR. Технически ресурсы в рамках JAR доступны только для чтения. Вы не можете писать/изменять какие-либо файлы внутри JAR.

У меня есть файл свойств в моей программе Java, который хранит несколько значений. В окне настроек пользователь может редактировать эти значения и сохранять изменения в следующий раз, когда запускает программу.

Вместо сохранения этих измененных значений в файле свойств вы можете использовать базу данных/кеш/плоский файл для хранения этих значений и чтения из них во время выполнения.

+0

Хорошо. Итак, если я хочу сохранить изменения в файле свойств, я должен сохранить файл свойств за пределами JAR-файла? –

+0

Да. Это можно сделать. –