1

所以我有这段代码应该检查并确保所需的密钥存在,但不管它们是否存在,它总是会调用 if 块中的代码

else {
    Wini ini = new Wini(new File("config.ini"));
    if(!ini.containsKey("nick") || !ini.containsKey("serverHostname") || !ini.containsKey("serverPort") || !ini.containsKey("defaultChannel") || !ini.containsKey("adminNick") || !ini.containsKey("adminHostname")) {
        System.out.println("One or more keys in your configuration do not exist, Remaking configuration");
        ini.clear();
        ini.add("Config");
        System.out.print("Nickname: ");
        ini.put("Config", "nick", input.next());
        System.out.print("Server Hostname: ");
        ini.put("Config", "serverHostname", input.next());
        System.out.print("Server Port: ");
        ini.put("Config", "serverPort", input.nextInt());
        System.out.print("Default Channel: ");
        ini.put("Config", "defaultChannel", input.next());
        ini.add("Administration");
        System.out.print("Bot Administrator Nickname: ");
        ini.put("Administration", "adminNick", input.next());
        System.out.print("Bot Administrator Hostname: ");
        ini.put("Administration", "adminHostname", input.next());
        ini.store();
        System.out.println("Configuration file Remade, Continuing with startup");
    }

编辑:这是 config.ini:

[Config]
nick = Craftxbot
serverHostname = irc.alphachat.net
serverPort = 6667
defaultChannel = #minecraftchat
adminNick = craftxbox
adminHostname = craftxbox.tk
4

3 回答 3

1

不是在特定部分调用 containsKey(),而是调用ini.containsKey(sec)ini 对象(整个 ini 文件),这意味着您正在检查文档中 Section sec 的存在。

您应该调用sec.containsKey(key)特定的部分来检查 sec 下的密钥是否存在。所以你的代码应该看起来像

 Wini ini = new Wini(new File("config.ini"));
 Ini.Section sec = ini.get("Config");  
    if(!sec.containsKey("nick") || !sec.containsKey("serverHostname") || !sec.containsKey("serverPort") || !sec.containsKey("defaultChannel") || !sec.containsKey("adminNick") || !sec.containsKey("adminHostname")) {

    }
于 2018-04-10T20:25:11.583 回答
0

我在您的配置文件中没有看到空键。

所以,

 !ini.containsKey("")

将始终评估为真。

于 2016-02-19T18:51:07.017 回答
0

很难确定这个1,但我怀疑不containsKey应该那样使用。由于您有一个带有部分的 ini 文件,我认为您应该在“配置”部分中使用 containsKey。

这里有一些例子:http: //www.massapi.com/method/org/ini4j/Profile/Section.containsKey.html


1 ...考虑到ini4j的javadocs的明显缺点。

于 2016-05-29T04:25:20.850 回答