Запись файла в папку ресурсов в банке - PullRequest
2 голосов
/ 12 февраля 2020

В моем проекте java swing есть папка ресурсов (файлы), которая содержит текстовый файл (users.txt), я читаю и записываю данные в этот текстовый файл. Когда я экспортирую его как файл jar, чтение из этого файла в порядке, , но запись в файл является проблемой. Я читаю из файла таким образом

InputStream in1 = getClass().getResourceAsStream("/files/users.txt"); 
BufferedReader reader1 = new BufferedReader(new InputStreamReader(in1));

Чтение работает отлично штраф в jar-файле и запись в тот же файл ниже кода (что является проблемой для jar-файла)

    File file = new File("src/files/users.txt"); 
    FileWriter fw = new FileWriter(file,true);
    fw.write(data+"\n");
    fw.close();

, пожалуйста, помогите мне, как я могу записать в файл в папке ресурсов, используя фляга Спасибо!

1 Ответ

2 голосов
/ 12 февраля 2020

Как уже сказано в комментариях, файлы в 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>
...