[CF4M教程]#4写一个简单的Config

创建一个ModuleConfig类。

public class ModuleConfig {
}

加上Config注解。

@Config("Modules")
public class ModuleConfig {
}

加入2个方法,分别写上Load和Save注解,分别是启动和退出的时候调用。


@Config("Modules")
public class ModuleConfig {
    @Load
    public void load() {
    }
    @Save
    public void save() {
    }
}

这是加载的方法。

@Load
public void load() {
    for (ModuleProvider module : CF4M.MODULE.getAll()) {//遍历所有Module
        JsonArray jsonArray = new JsonArray();
        try {
            jsonArray = new Gson().fromJson(read(CF4M.CONFIG.getByInstance(this).getPath()), JsonArray.class);//读取配置文件并存入JsonArray
        } catch (IOException e) {
            e.printStackTrace();
        }
        for (JsonElement jsonElement : jsonArray) {//遍历JsonArray
            JsonObject jsonObject = jsonElement.getAsJsonObject();//获取JsonObject
            if (module.getName().equals(new Gson().fromJson(jsonObject, JsonObject.class).get("name").getAsString())) {//判断当前Module的名字,是否和Json对象里的名字一样
            if (jsonObject.get("enable").getAsBoolean()) {//如果一样,获取Module是否打开
                module.enable();//打开的话就打开这个Module
            }
            module.setKey(jsonObject.get("key").getAsInt());//获取配置的Key并修改Module的快捷键
            }
        }
    }
}

这个是保存的方法。

@Save
public void save() {
    JsonArray jsonArray = new JsonArray();
    for (ModuleProvider module : CF4M.MODULE.getAll()) {// 遍历所有Module
        //获取Module的,名字、开启状态、快捷键,创建为JsonObject对象,添加到JsonArray
        JsonObject jsonObject = new JsonObject();
        jsonObject.addProperty("name", module.getName());
        jsonObject.addProperty("enable", module.getEnable());
        jsonObject.addProperty("key", module.getKey());
        jsonArray.add(jsonObject);
    }
    try {
        write(CF4M.CONFIG.getByInstance(this).getPath(), new Gson().toJson(jsonArray));//写入Json文件
    } catch (IOException e) {
        e.printStackTrace();
    }
}

读取文件和保存文件,用了apache的commons.io

private String read(String path) throws IOException {
    return FileUtils.readFileToString(new File(path));
}

private void write(String path, String string) throws IOException {
    FileUtils.writeStringToFile(new File(path), string, "UTF-8");
}