首页 > 解决方案 > 读取文件时Java中的空指针异常

问题描述

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

}

标签: exception-handlingnullpointerexception

解决方案


在 OpenFile() 中,在 try 块内,您必须删除

Scanner x=new Scanner(file);

并将其保留为

x=new Scanner(file);

解释:

在您的代码中,当您编写

Scanner x=new Scanner(file);

在 try 块中,您正在创建一个新变量,但与您在类开头声明的名称相同

private Scanner x;

现在您将有两个名为“x”的扫描仪变量。在 try 语句中,您正在初始化该块中的那个,但它只存在于那里,因此一旦您离开 try 块,它就会被销毁。

现在回到 ReadFile() 函数,您正在调用x .hasNextLine(),但是这个 'x' 是您在开始时声明的那个,而不是 try 语句中的那个,所以它仍然是未初始化的。


推荐阅读