ini4j 未在 .ini 文件中找到现有密钥
ini4j Is not finding existing key in .ini file
所以我有这段代码应该检查并确保所需的键存在,但不管它们是否存在,它总是会调用 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
我在你的配置文件中没有看到空键。
因此,
!ini.containsKey("")
将始终计算为真。
很难确定这个1,但我怀疑containsKey
不应该那样使用。由于您有一个包含部分的 ini 文件,我认为您应该在 "Config" 部分中使用 containsKey。
这里有一些例子:http://www.massapi.com/method/org/ini4j/Profile/Section.containsKey.html
1 ...鉴于 ini4j 的 javadoc 的明显缺点。
不是在特定部分调用 containsKey(),而是在 ini 对象(整个 ini 文件)上调用 ini.containsKey(sec)
,这意味着您正在检查文档中是否存在 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")) {
}
所以我有这段代码应该检查并确保所需的键存在,但不管它们是否存在,它总是会调用 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
我在你的配置文件中没有看到空键。
因此,
!ini.containsKey("")
将始终计算为真。
很难确定这个1,但我怀疑containsKey
不应该那样使用。由于您有一个包含部分的 ini 文件,我认为您应该在 "Config" 部分中使用 containsKey。
这里有一些例子:http://www.massapi.com/method/org/ini4j/Profile/Section.containsKey.html
1 ...鉴于 ini4j 的 javadoc 的明显缺点。
不是在特定部分调用 containsKey(),而是在 ini 对象(整个 ini 文件)上调用 ini.containsKey(sec)
,这意味着您正在检查文档中是否存在 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")) {
}