有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

从Java文件读取数组元素时出现NullPointerException错误

在我的程序中,我创建一个景点,并填写门票类型的数量、标题和成本,然后退出程序并再次运行

我有一个从文件中读取元素的构造函数。然后,当我尝试读取数组元素时,它会给我一个NullPointerException错误,即使该元素不是空的

当我注释掉下面错误所在的代码块时,输入字符串“Tour Only”会出现一个NumberFormatException错误,所以我知道它不是空的

fileScanner.nextLine();
for (int i = 0; i < getTicketTypesNum(); i++)
    this.ticketTypeTitle[i] = fileScanner.nextLine();
fileScanner.nextLine();

下面是完整的代码

吸引力。java

// The constructor.
public Attraction(Scanner fileScanner) {
  ...

  // The data read before the error.
  fileScanner.nextLine();
  this.ticketTypesNum = Integer.parseInt(fileScanner.nextLine());
  fileScanner.nextLine();

  fileScanner.nextLine();
  for (int i = 0; i < getTicketTypesNum(); i++) {
    // Line where the error is located.
    this.ticketTypeTitle[i] = fileScanner.nextLine();
  }

  fileScanner.nextLine();
  for (int i = 0; i < getTicketTypesNum(); i++)
     this.ticketTypeCost[i] = Integer.parseInt(fileScanner.nextLine());
  fileScanner.nextLine();

  ...
}


// Store the attraction information and write it to file.
public void writeData(PrintWriter pw) {
  ...

  pw.println("Number of Ticket Types:");
  pw.println(getTicketTypesNum());
  pw.println();

  pw.println("Ticket Titles:");
  for (int i = 0; i < getTicketTypesNum(); i++)
    pw.println(getTicketTypeTitle()[i]);
  pw.println();

  pw.println("Ticket Costs:");
  for (int i = 0; i < getTicketTypesNum(); i++)
    pw.println(getTicketTypeCost()[i]);
  pw.println();

  ...
}

如果你需要更多的代码,我会编辑我的问题,包括更多

谢谢你的帮助

更新

我试着注释掉出错的那一行,然后继续运行代码,当我必须读取数组元素时,我会得到一个NullPointerException


共 (1) 个答案

  1. # 1 楼答案

    这是一个有效的示例程序。你可以试试这个并打印你的数组。 确保你有这个扫描仪。hasNextLine()在从文件中获取元素之前进行检查。此外,理想情况下,数组大小应该等于文件中占用的行数

    import java.io.File;
    import java.io.IOException;
    import java.nio.charset.StandardCharsets;
    import java.util.Arrays;
    import java.util.Scanner;
    
    public class FileRead {
    
        public static void main(String args[]) {
    
            String array[] = new String[6];
    
            File file = new File("C:\\Users\\Desktop\\text");
    
            try (Scanner sc = new Scanner(file, StandardCharsets.UTF_8.name())) {
                int i =0;
                while (sc.hasNextLine()) {
    
                    array[i] = sc.nextLine();
                    i++;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
    
            System.out.println(Arrays.toString(array));
    
        }
    
    }
    

    让我知道这对你是否有效