Как читать или писать файл .properties вне файла JAR - PullRequest
1 голос
/ 04 августа 2011

Я создал проект, который читает часть конфигурации из файла .properties

public class PreferenceManager {
    private int refreshTime;
    private String[] filters;
    Properties properties ;
    public PreferenceManager() throws FileNotFoundException, IOException
    {
        properties = new Properties();


        properties.load(ClassLoader.getSystemResourceAsStream ("preferences.properties"));

    }


    public void save() throws IOException, URISyntaxException
    {
        properties.setProperty("REFRESH_TIME", String.valueOf(refreshTime));
        String filtersStr = "";
        if(filters!= null){
            for(String str : filters)
            {
                if((str == null)||(str.isEmpty())) continue;
                filtersStr+= str.toUpperCase()+",";
            }
        }
        properties.setProperty("FILTERS", filtersStr);
        URI uri = ClassLoader.getSystemResource("preferences.properties").toURI();
        File f = new File(uri);
        properties.store(new  FileOutputStream(f), null);
    }
}

, и все в порядке.Теперь мне нужно создать файл JAR.Мне нужно знать, как заставить этот файл JAR читать этот файл свойств из папки, в которой он находится, потому что, когда файл свойств находится внутри JAR, я могу читать его, но могу писать в нем (Исключение: URI не является hirarchal)

, поэтому мне нужна ваша помощь, пожалуйста.

Спасибо

1 Ответ

7 голосов
/ 04 августа 2011

Просто сохраните файл в домашнем каталоге пользователя , который всегда доступен, будь то Windows или Linux / Mac:

// Initially load properties from jar
Properties props = new Properties();
properties.load(ClassLoader.getSystemResourceAsStream ("preferences.properties"));

// .. work with properties

// Store them in user's home directory
File userHome = new File(System.getProperty("user.home"));
File propertiesFile = new File(userHome, "preferences.properties");

props.store(new FileOutputStream(propertiesFile, "Properties for MyApp");

В следующий раз, когда приложение запустится, вы, конечно же, захотите загрузить их из домашнего каталога пользователя, если там есть файл свойств.
Сравнить https://docs.oracle.com/javase/8/docs/api/index.html?java/lang/System.html

...