exception-handling - 读取文件时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();
}
}
解决方案
在 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 语句中的那个,所以它仍然是未初始化的。
推荐阅读
- python - 如何确保所需的软件包始终安装/可用
- spring - 如何使用 accessTokenConverter 验证签名?
- python - TypeError:“mappingproxy”类型的对象不是 JSON 可序列化的
- sql - 如果有两个相同类型但性质不同的对象,应该采用什么表结构?
- excel - 范围参数的语法,在 VBA 中识别,而不是在单元格中
- scala - Samza 教程 compileScala FAILED
- android - 使用 Ionic DevApp 调试远程设备时未检测到浏览器
- python - 我如何从两列加上这两个在python中的值创建一个热图
- java - 如何使用 vertx 和 quarkus 发布静态集合
- android - 在不重新启动应用程序的情况下转移 Android 应用程序开发框架