我一直在编写一个Java程序 - 特别是一个Bukkit插件,虽然这与该问题无关 - 并且由于某种原因我无法看到我得到一个NullPointerException。下面摘录的是出现错误的代码。 getPath()
已经过充分测试并生成了正确的目录 - 也就是配置文件所在的目录。配置文件已创建,应该已写入。我已经成功创建了测试人员文件,配置文件也是如此。
File config = new File(getPath("config"));
BufferedReader in = new BufferedReader(new FileReader(config));
skipLines(11, in);
if(in.readLine().equalsIgnoreCase("true")) { //Exception is here
System.out.println("Successfully wrote to config file");
}
else {
System.out.println("Failed to write text correctly to config file");
}
in.close();
整个事情都包含在try / catch语句中。
如果您需要更多信息,请询问,我很乐意提供。
注意:文件工作正常 - 当我手动检查文件已写入时。这就是问题存在的原因。
写入该文件的代码如下:
File exConfig = new File(System.getProperty("user.dir") + File.separator + "configExample");
PrintWriter out = new PrintWriter(new FileWriter(config));
BufferedReader in = new BufferedReader(new FileReader(exConfig));
for(int i = 1; i <= configLength; i++) {
out.println(in.readLine());
}
out.flush();
out.close();
System.out.println("Successfully wrote defaults to config");
configLength
是一个等于配置中行数的变量。我测试了它,它的工作原理。
那里可能有些奇怪的东西。该文件名为&#34; configExample&#34;如下:
########################################
# hPlugin is written by newbiedoodle #
########################################
# ----- Plugin config file ----- #
########################################
hPlugin
v.0.3
NOTE: Do not edit the config file besides changing the values - it may result in errors.
--------------
Enable hPlugin?
true
Strikes before being banned?
3
Godmode?
true
First time running the plugin?
true
Curse protection?
true
Emergency shelter?
true
Path building?
true
Blocked words/phrases (Separate with colon (:)):
shit:fuck:damn:bitch:hell
正如你所看到的,这应该超过11行...如果第11行不是&#34;真实&#34;那么它仍然不应该导致错误。
好吧,经过一段时间的愚弄,我得到它的工作...原来,我有一个变量搞砸了,因为一个函数有一个硬编码的文件名,而不是设置为我试图通过的变量。感谢所有的帮助!
答案 0 :(得分:2)
显而易见的例外是, BufferedReader 无法读取任何内容。因此in.readLine()
返回null,因此调用in.readLine.equalIgnorecase()
会返回NullPointerException。
在继续之前,您应首先检查BufferedReader.readLine()是否返回null。
if(in.readLine().equalsIgnoreCase("true")) { //Exception is here
应该是
String line=null;
while((line=in.readLine())!=null) { //if in.readLine() returns null, the condition fails
if(line.equalsIgnoreCase("true")) {
//do your stuff
}
}
答案 1 :(得分:0)
readLine()返回null,然后在该空值上调用equalsIgnore 将这些调用分开,并检查是否为空。