在读取文件时,Java中的空指针异常

时间:2018-06-10 22:20:29

标签: exception-handling nullpointerexception

我正在尝试使用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();
      }

}

1 个答案:

答案 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语句里面的那个,所以它仍未被初始化。