gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:34:08 25 4
gpt4 key购买 nike

我也创建了一个主类来运行它,但它抛出了一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com