Помогите Условие создания файла, который находится в Jar файле

Блин, разве нету решений?
Тебе дали решение, но ты даже не даёшь код, чтобы понять в чём проблема.
И передавай ссылку на главный класс плагина, а не инстанс этот. Прям вот чую, что твой инстанс == null.
 
Я, вот, не понимаю, что тут сложного?
Использую примерно такой универсальный метод.
Поле Main.plugin - JavaPlugin - аналог твоего API.instance(), я думаю. Проверь, чтобы null не был.
JavaScript:
public static FileConfiguration loadYaml(String path) {
    if (!path.endsWith(".yml"))
       path += ".yml"; //Для использования обычными юзерми и просто для удобства
    File file = new File(Main.plugin.getDataFolder(), path); //Файл в папке твоего плагина
    if(file.isDirectory())
        file.delete(); //Удаляем, если это папка
    if (!file.exists()) {
        try {
            Main.plugin.saveResource(path, false); //Создаём, если файла нет
        } catch (Exception e) { //Может возникнуть в случае отсутствия ресурса в джарнике или при недостаточности прав
            Main.plugin.getLogger().log(Level.SEVERE, "Не удалось сохранить ресурс " + path);
            e.printStackTrace();
            return null;
        }
    }
    return YamlConfiguration.loadConfiguration(file); //Парсит содержимое в удобный объект
}
 
Я, вот, не понимаю, что тут сложного?
Использую примерно такой универсальный метод.
Поле Main.plugin - JavaPlugin - аналог твоего API.instance(), я думаю. Проверь, чтобы null не был.
JavaScript:
public static FileConfiguration loadYaml(String path) {
    if (!path.endsWith(".yml"))
       path += ".yml"; //Для использования обычными юзерми и просто для удобства
    File file = new File(Main.plugin.getDataFolder(), path); //Файл в папке твоего плагина
    if(file.isDirectory())
        file.delete(); //Удаляем, если это папка
    if (!file.exists()) {
        try {
            Main.plugin.saveResource(path, false); //Создаём, если файла нет
        } catch (Exception e) { //Может возникнуть в случае отсутствия ресурса в джарнике или при недостаточности прав
            Main.plugin.getLogger().log(Level.SEVERE, "Не удалось сохранить ресурс " + path);
            e.printStackTrace();
            return null;
        }
    }
    return YamlConfiguration.loadConfiguration(file); //Парсит содержимое в удобный объект
}
Считай независимая версия твоей поделки.
Java:
public static final FileConfiguration loadYaml(JavaPlugin instance, String path) {
    //Проверяем что нам подсунули как плагин.
    if (instance == null) {
        throw new IllegalArgumentException("Instance of the plugin is null!");
    }

    //Так же проверяем путь на null и пустоту.
    if (path == null || path.equals("")) {
        throw new IllegalArgumentException("Path can not be null or empty!");
    }

    //Для использования обычными юзерми и просто для удобства
    if (!path.endsWith(".yml")) {
        path += ".yml";
    }

    //Файл в рабочей папке твоего плагина
    File file = new File(instance.getDataFolder(), path);

    //Удаляем файл, если это папка
    if (file.isDirectory()) {
        file.delete();
    }

    //Создаём файл, если его нет
    if (!file.exists()) {
        try {
            instance.saveResource(path, false);
        } catch (Exception e) {
            //Может возникнуть в случае отсутствия ресурса в джарнике или при недостаточности прав
            instance.getLogger().log(Level.SEVERE, "Не удалось сохранить ресурс " + path, e);
            return null;
        }
    }
    //Парсит содержимое в удобный объект
    return YamlConfiguration.loadConfiguration(file);
}
 
Считай независимая версия твоей поделки.
Java:
public static final FileConfiguration loadYaml(JavaPlugin instance, String path) {
    //Проверяем что нам подсунули как плагин.
    if (instance == null) {
        throw new IllegalArgumentException("Instance of the plugin is null!");
    }

    //Так же проверяем путь на null и пустоту.
    if (path == null || path.equals("")) {
        throw new IllegalArgumentException("Path can not be null or empty!");
    }

    //Для использования обычными юзерми и просто для удобства
    if (!path.endsWith(".yml")) {
        path += ".yml";
    }

    //Файл в рабочей папке твоего плагина
    File file = new File(instance.getDataFolder(), path);

    //Удаляем файл, если это папка
    if (file.isDirectory()) {
        file.delete();
    }

    //Создаём файл, если его нет
    if (!file.exists()) {
        try {
            instance.saveResource(path, false);
        } catch (Exception e) {
            //Может возникнуть в случае отсутствия ресурса в джарнике или при недостаточности прав
            instance.getLogger().log(Level.SEVERE, "Не удалось сохранить ресурс " + path, e);
            return null;
        }
    }
    //Парсит содержимое в удобный объект
    return YamlConfiguration.loadConfiguration(file);
}
Ну, в принципе полезно, да. У меня-то так, поскольку не использую сторонние плагины и не использую кастомные названия файлов. Ну, и throw'ить не люблю.
 
throw'ить не люблю.
Зря конечно. Самое простое (но время жрёт не дурно) действие для того, чтобы показать пользователю об ошибке.
Ну, в принципе полезно, да. У меня-то так, поскольку не использую сторонние плагины и не использую кастомные названия файлов.
Я такую конструкцию залепил для того, чтобы кинуть в какой ниб класс Utils и забыть как он устроен в принципе. Накидать доков сверху метода, и пущай пылится.
 
Последнее редактирование:
Зря конечно. Самое простое (но время жрёт не дурно) действие для того, чтобы показать пользователю об ошибке.
Обожаю ловить приходы сразу нескольких Exception'ов из-за одной ошибки. :D А если серьёзно, то такие конструкции оставляю там, где уверен в отсутствии ошибок. На стороне вызова банально никогда не приходится в trycatch заключать. Красиво же. Правда IDE на потенциальный null намекает, ну да ладно... На самом деле, конечно, это не очень правильно. По канонам надо делать так, как ты и предложил. Но в конце концов я для паблика практически ничего не пилю, так что позволительно, наверно.
Я такую конструкцию залепил для того, чтобы кинуть в какой ниб класс Utils и забыть как он устроен в принципе. Накидать доков сверху метода, и пущай пылиться.
Да понятное дело. По той же причине, что для паблика не делаю, меня устраивает и нынешний вариант. Как раз утилитой и валяется без движения. А ТС'у тем более такого не надо. Даже я-то лишнего скинул, в общем. ;)
 
Даже я-то лишнего скинул, в общем. ;)
Ну так то да - обернуть saveResource и loadConfiguration на 7+ строк та ещё затея :D
Обожаю ловить приходы сразу нескольких Exception'ов из-за одной ошибки.
В принципе да - лучше создавать само исключение, выбрасывать его в лог и возвращать null - так оно не должно разъехаться по всему коду. Но возвращая null мы как бэ намекаем, что этот самый null мы после вызова этого метода как то обработаем. (Слишком много null в одном сообщении)
 
Ну так то да - обернуть saveResource и loadConfiguration на 7+ строк та ещё затея :DВ принципе да - лучше создавать само исключение, выбрасывать его в лог и возвращать null - так оно не должно разъехаться по всему коду. Но возвращая null мы как бэ намекаем, что этот самый null мы после вызова этого метода как то обработаем. (Слишком много null в одном сообщении)
Ну, это моя самооуверенность... В других же случаях нулл обрабатывается, ясное дело.
 
Это позволит копировать из jar в папку с конфигами плагина.
true - копировать с заменой.
Далее получаешь нужный тебе конфиг как обычно.
Java:
saveResource("ConfigTradeItems.yml", true);
saveResource("NameMaterials.yml", true);
 
Если без сторонних библиотек, то getResourceAsStream и FileOutputStream тебе в помощь.
 
Это позволит копировать из jar в папку с конфигами плагина.
true - копировать с заменой.
Далее получаешь нужный тебе конфиг как обычно.
Java:
saveResource("ConfigTradeItems.yml", true);
saveResource("NameMaterials.yml", true);
Смотришь на дату?
 
Смотришь на дату?
Этот человек создал тему с вопросом, на которую я дал ответ, после чего он её закрыл ничего не написав.
Ну я смотрю такой и думаю вроде же тема была открыта и отправил, а отказывается не в ту, пока увидел, дык он уже отблагодарил. Значит не зря отправил. :D
 
Этот человек создал тему с вопросом, на которую я дал ответ, после чего он её закрыл ничего не написав.
Ну я смотрю такой и думаю вроде же тема была открыта и отправил, а отказывается не в ту, пока увидел, дык он уже отблагодарил. Значит не зря отправил. :D
А потом я их удалил. Вообще хотел удалить только одно с "у меня этот код закидывает ошибку" по причине "я криворукий дибил", но случайно удалил и второе
 
Этот человек создал тему с вопросом, на которую я дал ответ, после чего он её закрыл ничего не написав.
Ну я смотрю такой и думаю вроде же тема была открыта и отправил, а отказывается не в ту, пока увидел, дык он уже отблагодарил. Значит не зря отправил. :D
Ну, если по логике, раз он не нашел решение он бы апнул тему.
 
Назад
Верх