Переименование файла .jar не позволяет программе извлекать файлы - PullRequest
0 голосов
/ 27 апреля 2018

Я пытаюсь сохранить некоторые ресурсы для моей программы в исполняемом фляге, созданной через Intellij, а затем извлечь эти файлы во время выполнения после получения некоторого пользовательского ввода. Папки расположены в корне банки. У меня есть это, чтобы успешно извлечь файлы, как задумано, но проблемы начинаются, когда банку переименовывают. Как в заявке 1.jar в заявке 2.jar. Кто-нибудь знает, почему он так себя ведет?

Это метод, который выполняет извлечения. Модифицированная версия: Как я могу получить ресурс "Папка" из моего файла jar?

File jarFile = new File(getClass().getProtectionDomain().getCodeSource().getLocation().getPath());
    boolean inDirectory = false;

        if (jarFile.isFile()) { //run in JAR
            try {
                JarFile jar = new JarFile(jarFile);
                Enumeration<JarEntry> entries = jar.entries();
                while (entries.hasMoreElements()) {
                    JarEntry currentJar = entries.nextElement();
                    String name = currentJar.getName();
                    Path currentFile = Paths.get(name).getFileName();
                    if (name.startsWith(oldPath.replaceAll(Pattern.quote("\\"), "/"))) {

                        if (currentJar.isDirectory()) {
                            Files.createDirectories(Paths.get(newPath));

                            inDirectory = true;
                        } else {
                            if (Files.notExists(Paths.get(newPath), LinkOption.NOFOLLOW_LINKS)) {

                                Files.createDirectories(Paths.get(newPath).getParent());

                            }
                            BufferedInputStream source = new BufferedInputStream(jar.getInputStream(currentJar));
                            File dest = new File(newPath + (inDirectory ? "\\" + currentFile : ""));
                            FileOutputStream fos = new FileOutputStream(dest);
                            int read;
                            while ((read = source.read()) != -1) {
                                fos.write(read);
                                fos.flush();
                            }
                            fos.close();
                            source.close();
                        }
                    }
                }
                jar.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else { //run in IDE
            copyAndRename(oldPath, newPath);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...