在开发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
*请注意!Bukkit使用的是谷歌的gson!在classloader中不会加载一些另外的fastjson等库!
请一定使用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群:942025944
2条评论登录后可见