java - 在 Java 中读取文件会抛出 `NullPointerException`

标签 java nullpointerexception java-io

我也创建了一个主类来运行它,但它抛出了一个 NPE NullPointerExceptionreadFile()方法。我不确定为什么会发生这种情况。

/* this code is to read from a file testfile.txt which is already made beforehand with data in it*/
import java.io.*; //imported files
import java.util.*;

public class file_read {
  private Scanner x; //for reading from file

  public void openFile() {
    try {
      x = new Scanner(new File("testfile.txt"));
    } catch (Exception e) {
      System.out.println("error occurred");
    }
  }

  public void readFile() { //error in this method(NPE)
    while (x.hasNext()) {
      String a = x.next();
      String b = x.next();
      String c = x.next();
      System.out.printf("%s %s %s \n", a, b, c);
    }
  }

  public void closeFile() {
    x.close();
  }
}

public class file_read_main {
  public static void main(String[] args) {
    file_read obj = new file_read();
    obj.openFile();
    obj.readFile();
    obj.closeFile();
  }
}

这是一个类。另一个类已经创建了 main()其中包含此类的对象以及从该对象调用的方法。

最佳答案

问题是 x 为空。

根据您显示的代码,这只能是因为 openFile() 中引发了异常,而您忽略了它。

使openFile抛出异常:

public void openFile() throws IOException {
  x = new Scanner(new File("testfile.txt"));
}

(您还需要将 throws IOException 添加到您的 main 方法中)

现在,抛出 IOException 将会停止您的代码执行,因此它不会尝试读取该文件。

假设您没有设置默认的异常处理程序,您还将获得异常的堆栈跟踪,其中将包括引发异常的原因的详细信息。

<小时/>

作为异常处理的一般原则,不要捕获Exception,除非那确实是您真正需要处理的异常。它捕获所有异常,并且可能会意外捕获某些确实应该单独处理的异常类型。

您也不应该仅仅接受异常,除非您确实确定这是正确的做法。对于异常,您至少应该在 catch 中打印其堆栈跟踪:

e.printStackTrace();

但是,在当前情况下这不是最佳选择,因为您实际上需要在调用方法中停止进一步执行:传播异常是更好的选择。

关于java - 在 Java 中读取文件会抛出 `NullPointerException`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37647365/

相关文章:

java - 如何获取文件 io 的兼容时间戳?

Matcher.Find() 上的 Java 正则表达式 NPE

java - Maven 和 Junit

java - 即使文件中有文本,BufferedReader 也会返回 null

java - 系统找不到指定的文件,但文件存在

java - 如何将 -h 参数传递给 maven 编译器插件以创建 JNI 头文件

c# - RMI,现代 Java 相当于 .NET WCF(Windows 通信基础)吗?

java - 如何通过 JDBC 的 PreparedStatement 将 UUID 数组插入到 HyperSQL 数据库中

java - 当我引用 ArrayList.add 方法时,Android 应用程序在启动时崩溃

java - 无法抗拒工作