从文件中获取文本,BufferedReader,输出看起来没问题,但不等于“true”或“false”(文件中有什么)

时间:2013-12-22 18:37:51

标签: java bufferedreader filereader

我正在尝试从文件中获取信息(它将用作设置文件,true或false值),使用以下代码:

File information = new File(aPath + "/plugins/ArenaCraft/info.acs");

ArrayList<String> info = new ArrayList<String>();
BufferedReader br = new BufferedReader(new FileReader(information));
String line;
while((line = br.readLine()) != null) {
     String[] sLine = line.split(":");
     if(sLine[1] == "true"){
         info.add("true");
     }
     if(sLine[1] == "false"){
         info.add("false");
     }
     if(sLine[1] == null){
         System.err.println("[ArenaCraft]  sLine[1] is NULL.");
     }
     if(sLine[1] != "true" && sLine[1] != "false" && sLine[1] != null){
         System.err.println("[ArenaCraft]  sLine[1] is not NULL, but it's not \"true\" or \"false\".");
         System.err.println("[ArenaCraft]  sLine[1] is: " + sLine[1]);
     }
}

br.close();
return info;

然而,这是输出

[ArenaCraft]  sLine[1] is not NULL, but it's not "true" or "false".

消息。然后它确切地输出

[ArenaCraft]  sLine[1] is: true

所以,我不明白为什么它说它不是空或真或假。 你们想象为什么会这样吗?

我正在尝试阅读的文件内容没有编码,请按照:

notices:true

,仅此而已。

非常感谢任何帮助,提前谢谢。

4 个答案:

答案 0 :(得分:1)

您使用a==b代替a.equals(b)请参阅:Java String.equals versus ==

答案 1 :(得分:1)

嗯,==运算符比较引用。你想在这里使用equals()方法:

if (sLine[1].equals("true")) {
    [...]
}

此外,您应该使用String.trim()方法,以确保字符串中没有前导或尾随空格。像这样的一行:param = true会用你的代码解析为“true”,这不等于“true”。

if (sLine[1].trim().equals("true")) {
    [...]
}

答案 2 :(得分:1)

一般来说,改变:

if (cond1) { ... }
if (cond2) { ... }  
if (cond3) { ... }
if (!cond1 && !cond2 && !cond3) { .... }

if (cond1) { ... }
else if (cond2) { ... }
else if (cond3) { ... }
else { ... }

在最多其中一个条件可以为真的情况下,例如在您的示例中。

答案 3 :(得分:0)

使用equals()方法进行字符串内容比较,==进行字符串引用比较