我正在尝试使用Java中的扫描程序读取文件。当我运行下面的代码时,我得到以下输出和错误。
Exception in thread "main" java.lang.NullPointerException at PageRank$ReadInput.ReadFile(PageRank.java:29) at PageRank.main(PageRank.java:58)
请帮我修复此错误。
public class PageRank{
public static class ReadInput{
private Scanner x;
public void OpenFile(){
try {
File file = new File("input.txt");
Scanner x=new Scanner(file);
}
catch(Exception e){
System.out.println("File does not exist.");
}
}
public void ReadFile() {
while (x.hasNextLine() ) {
String s = x.nextLine();
System.out.println(s);
String s1 = x.nextLine();
String s2 = x.nextLine();
System.out.println(s);
System.out.println(s1);
System.out.println(s2);
}
}
}
public static void main(String[] args)throws Exception
{
ReadInput P = new ReadInput();
P.OpenFile();
P.ReadFile();
}
}
答案 0 :(得分:1)
在OpenFile()中,在try块内,你必须删除
中的'Scanner'Scanner x=new Scanner(file);
并将其保留为
x=new Scanner(file);
<强>解释强>
在您的代码中,当您编写
时Scanner x=new Scanner(file);
在try块中,您正在创建一个新变量,但其名称与您在类开头声明的变量相同
private Scanner x;
现在你有两个名为'x'的Scanner变量。在try语句中,你正在初始化那个块里面的那个,但它只存在于那里,所以一旦你离开try块就会被破坏。
现在回到ReadFile()函数,你正在调用 x .hasNextLine(),但这个'x'是你在开头声明的那个,而不是try语句里面的那个,所以它仍未被初始化。