- Баллы
- 46
Здравствуйте все! Сегодня я хотел бы написать гайд, как работать с YAML файлами.
Нам понадобиться:
- IDE
- java
- bukkit или его форки
Давайте начнём!
У нас будет две главные переменные: file - сам файл и config - загруженные данные из файла.
Создаём файл:
Теперь нужно получить данные из файла:
Таким же способом будем перезагружать конфиг, а сохранить его можно так:
Отлично! Но что же делать, если файл не существует? Это самое сложное и интересное в этой теме: создать новый файл и наполнить данными!
В интернете предлагают такой способ:
Дальше получаем данные из конфига (которых нет) и заполняем:
Но в больших плагинах данных много, а ещё надо делать комментарии! Согласитесь, это не удобно!
Поэтому я предлагаю другой способ:
Сложно? Давайте всё разберём по шагам:
По примеру выше я думаю, вы поняли, что file.exists() проверяет существует ли файл
InputStream получает файл из папки проекта (в нашем случае в /src/main/java/resources), где мы его можем создать, как обычный yaml и заполнить. Это удобнее!
InputStreamReader - читает этот файл, чтобы в будущем перенести его наружу в папку plugins/плагин
FileWriter - это класс джавы, который позволяет записывать данные в файл.
writer.flush() - необязателен, очищает файл (может пригодиться в будущем)
file.createNewFile() - думаю понятно (создает новый пустой файл)
reader.read() - читает символ из файла (возвращает число!)
writer.write() - записывает символ в файл
Получается данный цикл читает данные из файла в корневой папки по одному символу и записывает
эти данные в файл в папке /plugins/ВашПлагин, а именно в config.yml.
writer.close() - закрывает файл после записи (обязательно)!
e.printStackTrace() - печатает данные об ошибке
IOException - ошибка, которая может возникнуть при работе с файлами и сайтами.
Теперь думаю всё понятно! Но если вам нужно обрабатывать несколько файлов, лучше создать отдельный класс!
@imDaniX предложил более современный способ: plugin.saveResourcee(args);
Нам понадобиться:
- IDE
- java
- bukkit или его форки
Давайте начнём!
У нас будет две главные переменные: file - сам файл и config - загруженные данные из файла.
Создаём файл:
Код:
public class Main extends JavaPlugin {
private File file; //Объявляем переменные
private FileConfiguration config;
public void onEnable() {
Plugin plugin = Bukkit.getPluginManager().getPlugin(getName()); //Получаем наш плагин
file = new File(plugin.getDataFolder().getAbsolutePath()+"/config.yml"); //Создаем новый файл
}
}
Теперь нужно получить данные из файла:
Код:
config = YamlConfiguration.loadConfiguration(file);
Таким же способом будем перезагружать конфиг, а сохранить его можно так:
Код:
config.save(file);
Отлично! Но что же делать, если файл не существует? Это самое сложное и интересное в этой теме: создать новый файл и наполнить данными!
В интернете предлагают такой способ:
Код:
if (!file.exists()) {
file.createNewFile();
}
Код:
config.set("key1", "value1");
config.set("key2", "value2");
config.set("key3", true);
Поэтому я предлагаю другой способ:
Код:
if (!file.exists()) {
InputStream is = Main.class.getResourceAsStream("/main/java/resources/config.yml");
InputStreamReader reader = new InputStreamReader(is);
try {
FileWriter writer = new FileWriter(file);
writer.flush();
file.createNewFile();
int i = reader.read();
while (i != -1) {
writer.write(i);
i = reader.read();
}
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
По примеру выше я думаю, вы поняли, что file.exists() проверяет существует ли файл
InputStream получает файл из папки проекта (в нашем случае в /src/main/java/resources), где мы его можем создать, как обычный yaml и заполнить. Это удобнее!
InputStreamReader - читает этот файл, чтобы в будущем перенести его наружу в папку plugins/плагин
FileWriter - это класс джавы, который позволяет записывать данные в файл.
writer.flush() - необязателен, очищает файл (может пригодиться в будущем)
file.createNewFile() - думаю понятно (создает новый пустой файл)
reader.read() - читает символ из файла (возвращает число!)
writer.write() - записывает символ в файл
Получается данный цикл читает данные из файла в корневой папки по одному символу и записывает
эти данные в файл в папке /plugins/ВашПлагин, а именно в config.yml.
writer.close() - закрывает файл после записи (обязательно)!
e.printStackTrace() - печатает данные об ошибке
IOException - ошибка, которая может возникнуть при работе с файлами и сайтами.
Теперь думаю всё понятно! Но если вам нужно обрабатывать несколько файлов, лучше создать отдельный класс!
@imDaniX предложил более современный способ: plugin.saveResourcee(args);
Последнее редактирование: