Я использую знатока и храню файл свойств в src/main/resources
как который я могу читать прекрасный:
properties.loadFromXML(this.getClass().getClassLoader().
getResourceAsStream("META-INF/properties.xml");
Действительно ли возможно затем записать в этот файл, когда это упаковывается как банка? Я попробовал следующее:
properties.storeToXML(new FileOutputStream(new File(this.getClass().getClassLoader().
getResource("META-INF/properties.xml").toURI())), "");
Это работает в Eclipse, потому что он сохранил файл к target/classes/META-INF
, но не при упаковке как банка также - действительно ли возможно достигнуть того же самого?
Можно ли потом писать в этот файл, когда он будет упакован как jar?
Короткий ответ: нет, нельзя, jar-файл - это файл, а не каталог. И вообще, обычно вы не записываете файлы свойств обратно в jar-файл.
Вы должны поместить этот файл свойств в classpath на локальной файловой системе, вне JAR.
Всегда можно изменить упакованный файл путем распаковки, перезаписи и повторной упаковки. Иногда это самый простой подход.
Jar-файл по сути является переименованным файлом .ZIP
. В Java есть классы для доступа к файлам в файле .Zip, и вы можете (при наличии достаточной мотивации) написать для этого программу.
В качестве альтернативы, я почти уверен, что есть задачи ant
, которые тоже могут это делать (подумайте о творческом использовании задачи jar
), и есть плагины POM для запуска ant задачи от Maven.