@MaxLich
java developer

Как писать в файл в jar-нике из класса, находящегося в том же jar-нике?

Здравствуйте. Столкнулся с проблемой. Написал простенькую консольную игру. Сделал там топ-лист игроков. Саму таблицу сохраняю в TreeSet (где каждая строка - это объект со своими полями-столбцами таблицы). Потом я сериализую эту таблицу в файл. При запуске игры таблица игроков загружается из файл (происходит десериализация). Когда указываю такой путь:
"." + File.separator + "src" + File.separator + TopList.class.getPackage().getName().replace(".", File.separator) + File.separator + "TopListOfPlayers.dat";

то в ИДЕИ всё работает, но ничего не работает в jar-нике. Когда использую ресурс и делаю так:
private static final String fileTopList = File.separator +
            TopList.class.getPackage().getName().replace(".", File.separator) +
            File.separator + "TopListOfPlayers.dat";
    private final URL urlFileTopList = getClass().getResource(fileTopList); 
...
try (ObjectInputStream objectInput = new ObjectInputStream(urlFileTopList.openStream())) {
            topList = (Set<TopListEntry>) objectInput.readObject();
        }

То везде работает (и в джар-нике, и в ИДЕИ), но, если использовать загрузку ресурсов, то у меня в них не получается писать. Как можно решить эту проблему? Неужели только работой со внешним файлом (вне jar-ника)?
  • Вопрос задан
  • 375 просмотров
Решения вопроса 1
TheKnight
@TheKnight
Программист
Сделай проще.
Храни стартовый топ лист в jar-файле с игрой. При первой необходимости записи в него - создавай в строго определенном месте (в домашней директории пользователя, рядом с jar'ником, etc) файл с обновленным топом игроков.

Процесс загрузки топа будет выглядеть достаточно просто:
1) Проверяем наличие файла с топом игроков в выбранном месте.
2) Если не нашли - грузим из jar файла.

И да - зачем тебе топ игроков? Если ты хочешь, что бы игроки из разных мест мерились силушкой богатырской - тебе необходимо этот топ хранить централизованно - например на едином сервере. Если хранение строго локально - генерируй выдуманный топ при первом запуске рядом с jar-файлом и обновляй по мере совершения игр.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@MaxLich Автор вопроса
java developer
Пока нашёл это: ссылка. И судя по всему это невозможно. Можно только писать в какой-то внешний файл. Это неудобно, потому что проще распространять программу в виде одного файла - jar. Выходом вижу запаковку папки с jar-ником и внешним файлом в архив, и распространение программы в таком виде. (В моём случае, я могу просто каждый раз создавать файл топ-листа в той же папке, где находится jar-ник, и работать уже с этим созданным файлом.)

ЗЫ Только не пойму пока, как работать тогда с файлом из ИДЕИ, надо подумать....
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы