Как уже сказано в комментариях, файлы в JAR считаются доступными только для чтения.
Вам необходимо создать файл в каком-либо месте пользователя или в каталоге установки (или в месте, выбранном пользователем).
Если у вас есть предварительно сконфигурированные данные, у вас есть как минимум 2 варианта:
- Отправьте файл вдоль файла JAR с помощью какого-либо инструмента упаковки (также может быть файлом ZIP). Для ZIP-файлов посмотрите плагин Maven Assembly, если вы используете Maven.
- Извлеките файл из JAR.
Для последнего варианта использования, который я написал некоторые служебные классы:
public void extractResource(String resourcePathString, Path targetDirPath) throws IOException, URISyntaxException {
URI jarURI = JarFiles.getJarURI(SomeClassInTheJar.class);
try (FileSystem jarFS = JarFiles.newJarFileSystem(jarURI)) {
Path resourcePath = jarFS.getPath(resourcePathString);
CopyFileVisitor.copy(resourcePath, targetDirPath);
}
}
С помощью CopyFileVisitor вы можете легко рекурсивно извлекать / добавлять каталоги из / в файлы JAR или ZIP, так как CopyFileVisitor использует PathUtils и, следовательно, работает в файловых системах.
JarFiles.getJarURI получает JAR URI класса.
Для получения дополнительной информации ознакомьтесь с руководством: https://www.softsmithy.org/softsmithy-lib/lib/2.1.1/docs/tutorial/nio-file/index.html#ExtractJarResourceSample
Библиотека с открытым исходным кодом. Вы можете получить его в Maven Central:
<dependency>
<groupId>org.softsmithy.lib</groupId>
<artifactId>softsmithy-lib-core</artifactId>
<version>2.1.1</version>
</dependency>