Bukkit插件开发--基础的数据读写操作
- 2020-02-27 06:16:51
- William_Shi
- 14758
温馨提示: 这篇文章于1729天前编写,现在可能不再适用或落后.
在开发Bukkit插件时,不可避免的需要存储和读取一些数据,以下介绍一些基本的数据交换方法。
一、使用yaml
学习Bukkit插件开发时一定会学到config.yml和plugin.yml的使用
yml文件是Bukkit的配置文件格式(也是一种较为通用的配置文件格式)
yaml语法对于新手腐竹来说较为简单直观
学习yaml语法可以看这个https://www.runoob.com/w3cnote/yaml-intro.html
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等插件,可自行反编译查看其实现方法
json的语法请自行去网上查找,可参考https://www.runoob.com/json/json-tutorial.html
*请注意!Spigot等服务端打包了谷歌的gson。在classloader中没有一些另外的fastjson等库!
如没有进行额外的shade等操作,则使用gson去解析json!否则会出现NoClassDefFoundError!
如何添加gson依赖可以在网上找到
可参考https://blog.csdn.net/csdn_liumh/article/details/82893908
创建、写入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();
以上这行代码鸣谢m8_mve大佬,她大大简化了我的读取操作
先前我用的是InputStream,循环读取字节并存入字符串
现在直接用gson的方法就可以搞定了,代码简洁性和效率都提升了
如果需要更强大的数据管理,那么建议使用数据库。
插件较常用的数据库是SQLite,MySQL等。这就属于进阶内容(可能我会写一篇sql基础操作也可能咕咕咕)。
最后,附上Bukkit插件开发交流群的群号,欢迎来此交流插件开发
QQ群:754174738
阁下需要登录后才可以查看评论哦~