在开发Bukkit插件时,不可避免的需要存储和读取一些数据,以下介绍一些基本的数据交换方法。
一、使用yaml
学习Bukkit插件开发时一定会学到config.yml和plugin.yml的使用
yml文件是Bukkit的配置文件格式(也是一种较为通用的配置文件格式)
yaml语法对于新手腐竹来说较为简单直观
yml文件的读写在网上有很多,以下提供一个简单的实例File file = new File(plugin.getDataFolder(), "example.yml");
//plugin指这个插件的主类实例
if (!file.getParentFile().exists()) {
// 如果父目录不存在,创建父目录(即/plugins/插件名字)
file.getParentFile().mkdirs();
}
if (!file.exists()) {
//文件不存在则创建一个新的文件
try {
file.createNewFile();
//创建文件
Writer writer = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
//创建输出流
writer.write("example: 233");
//此处example的双引号可选
//写入中文请使用双引号以免读取“半个字”出错
writer.flush();
writer.close();
//向文件内写入一行“example: 233”
}
catch(Exception e){
e.printStackTrace();
}
FileConfiguration example = YamlConfiguration.loadConfiguration(file);
//读取文件
assert (int) example.get("example") == 233;
二、使用json
一般json用于数据交换,比较轻量(xml一般用于web开发)
但json最好不要用来作为配置文件,因为手动去修改时可能会出错
使用json作为配置文件的包括ColorMOTD等插件,可自行反编译查看其实现方法
*请注意!Bukkit使用的是谷歌的gson!在classloader中不会加载一些另外的fastjson等库!
请一定使用gson去解析json!否则编译时不会出错但是一旦运行就会出现NoClassDefFoundError!
如何添加gson依赖可以在网上找到
创建、写入json文件File file = new File(plugin.getDataFolder(), "example.json");
if (!file.getParentFile().exists()) {
// 如果父目录不存在,创建父目录
file.getParentFile().mkdirs();
}
if (!file.exists()) {
try {
file.createNewFile();
Writer write = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
Map map = new HashMap();
map.put("Example", 233);
//创建一个Map,加入一个键值对,键为Example,值为233
Gson gson = new GsonBuilder().create();
String jsonString = gson.toJson(map);
//转换成json字符串
//插件开发中常用的列表、Map等都可以转换成json字符串
write.write(jsonString);
write.flush();
write.close();
//写入这个json字符串
} catch (Exception e) {
e.printStackTrace();
}
}
直接将某个对象(此处是Map)写入json文件Map m ;//以Map来示范
m.put("example","another example");
JSONObject jsonObject = new JSONObject(m);
//转为json对象
String jsonString = jsonObject.toJSONString();
//转为json字符串
File jsonFile = new File(plugin.getDataFolder(), "example.json");
//注意判断文件是否存在,见上方
//plugin是主类实例
try {
Writer write = new OutputStreamWriter(new FileOutputStream(jsonFile), "UTF-8");
write.write(jsonString);
write.flush();
write.close();
} catch (Exception e) {
e.printStackTrace();
}
读取json文件File jsonFile = new File(plugin.getDataFolder(), "example.json");
//plugin是主类实例
JsonObject json = new JsonObject();
try {
json = new JsonParser().parse(new JsonReader(new FileReader(jsonFile))).getAsJsonObject();
//使用gson的方法去简便地读取文件内容
//鸣谢m8_mve
} catch (Exception e) {
e.printStackTrace();
}
Gson gson = new GsonBuilder().create();
Map jsonMap = gson.fromJson(json, Map.class);
//将json字符串转为Map
注:json = new JsonParser().parse(new JsonReader(new FileReader(jsonFile))).getAsJsonObject();
如果需要更强大的数据管理,那么建议使用数据库。