使用scanner.hasnext()时出现java nullpointerexception;

au9on6nz  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(442)

我想出了以下代码来读取文件中的信息:

  1. import java.io.*;
  2. import java.util.*;
  3. public class Reader {
  4. private Scanner s;
  5. public void openFile() {
  6. try {
  7. s = new Scanner(new File("file.txt"));
  8. } catch (Exception e) {
  9. System.out.println("File not found. Try again.");
  10. }
  11. }
  12. public void readFile() {
  13. while (s.hasNext()) {
  14. String a = s.next();
  15. String b = s.next();
  16. String c = s.next();
  17. int d = s.nextInt();
  18. int e = s.nextInt();
  19. int f = s.nextInt();
  20. }
  21. public void closeFile() {
  22. s.close();
  23. }
  24. }

但是,我在(while(s.hasnext()))行上遇到一个nullpointer错误,无法找到解决方案。
我在eclipse中工作,并且我从中读取的文件被正确地导入到项目中,所以这应该不是问题。
编辑:
我访问方法的方式:

  1. public class Tester {
  2. public static void main(String[] args) {
  3. Reader read = new Reader();
  4. read.openFile();
  5. read.readFile();
  6. read.closeFile();
  7. }
  8. }
0h4hbjxa

0h4hbjxa1#

根据npe抛出的声明, while (s.hasNext()) ,很可能 s 是空指针,可以添加 System.out.println(s); 在那份声明之前再确认一下。
为什么 snull ,可能有两个原因:
你没有调用 openFile 之前 readFile 打开文件时引发异常。这个 s 只是一个声明,还没有指向任何对象。
也许为了更好的实践,您可以Assert示例是否 null 或者在调用它的方法之前。据我所知 readFile 取决于 openFile ,也许您可以设置 openFile 类似于布尔值,并在进一步打开文件操作之前检查返回值。读取一个连打开都不能的文件是不可能的,对吗?

  1. import java.io.*;
  2. import java.util.*;
  3. public class Reader {
  4. private Scanner s;
  5. public boolean openFile() {
  6. try {
  7. s = new Scanner(new File("file.txt"));
  8. return true;
  9. } catch (Exception e) {
  10. System.out.println("File not found. Try again.");
  11. return false;
  12. }
  13. }
  14. public void readFile() {
  15. while (s.hasNext()) {
  16. String a = s.next();
  17. String b = s.next();
  18. String c = s.next();
  19. int d = s.nextInt();
  20. int e = s.nextInt();
  21. int f = s.nextInt();
  22. }
  23. }

调用程序可以执行以下操作:

  1. Reader reader = new Reader();
  2. if (reader.openFile())
  3. reader.readFile();
展开查看全部

相关问题