java - 使用 BufferedReader (readLine()) 检查更多值时如何停止 NullPointerException

标签 java object io bufferedreader fileinputstream

我编写了一些代码来从 .txt 文件读取车辆数据。目前我可以正确读取所有数据并很好地创建对象。我有一个 while 循环来检查文件中的文本“车辆详细信息”,如果存在(即有另一辆车要添加),它会进入循环以添加数据。

问题是,当不再有数据时, readLine() 方法仍然被调用,这会创建一个 NullPointerException (至少我认为这是原因)

这是正在使用的方法。

public static void addNewVehicleFromFile(Showroom s)
{
    try
    {
        FileInputStream fStream = new FileInputStream("AddVehicleFromFile.txt");
        BufferedReader br = new BufferedReader(new InputStreamReader(fStream));
        String stringLine;

        while ((stringLine = br.readLine()).equalsIgnoreCase("Vehicle Details"))
        {
            System.out.println("P1");//Testing
            br.readLine();

            String[] manufacturer = br.readLine().split(" =");
            String[] model = br.readLine().split(" =");
            String[] vin = br.readLine().split(" =");
            String[] dateOfMan = br.readLine().split(" =");
            String[] taxBand = br.readLine().split(" =");
            String[] cost = br.readLine().split(" =");

            System.out.println("P2");//Testing
            System.out.println(manufacturer[0].toString());
            System.out.println(model[0].toString());
            System.out.println(vin[0].toString());
            System.out.println(dateOfMan[0].toString());
            System.out.println(taxBand[0].toString());

            br.readLine();

            System.out.println("P3");//Testing

            int strToInt = Integer.parseInt(cost[0]);

            Vehicle inputVehicle = new Vehicle(manufacturer[0], model[0], vin[0], dateOfMan[0],
                    taxBand[0].charAt(0), strToInt);

            System.out.println("P4");//Testing

            s.addVehicle(inputVehicle);

            System.out.println("P5");//Testing
        }

    }
    catch (FileNotFoundException fnfe)
    {
        System.out.println("File not found exception: " + fnfe.toString());
    }
    catch (IOException ioe)
    {
        System.out.println("I/O exception: " + ioe.toString());
    }

    System.out.println("addNewVehicleFromFile Complete");

}

不确定您是否需要它,但这是我的文件数据。

Vehicle Details

Fordtest =manufacturer
Focus =model
ioCheck =VIN
09/01/1989 =DateOfMan
d =TaxBand
19900 =Cost

Vehicle Details

Fordtest2 =manufacturer
Focus2 =model
ioCheckVIN2 =VIN
09/01/1989 =DateOfMan
a =TaxBand
1922 =Cost

最后,为了弄清楚程序运行到的位置,我添加了一些控制台输出作为测试。 while 循环迭代两次,在错误发生之前两次输出 p1-p5,并且它永远不会到达表明该方法已完成的最终控制台输出。

最佳答案

检查调用readLine()的结果是否不为null(空)。如果您检查并使其在空时不执行任何操作,这将解决您的问题!

关于java - 使用 BufferedReader (readLine()) 检查更多值时如何停止 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21101358/

相关文章:

java - 如何为 i18n 构建验证错误代码

c# - 消息模式下的 NamedPipeClientStream 永远不会将 IsMessageComplete 设置为 true

javascript - 无法读取reactjs中未定义的属性 'includes'?

python - 以有效的方式将类读写到文件中

c - 读取图像文件内容到缓冲区

java - JSF 2 复合组件不使用 f :ajax 更新值

Java Swing 文本字段高度

java - Maven全新安装失败(无法通过浏览器访问url)

javascript - JavaScript 中的可选参数

javascript - 根据给定的键更改 javascript 对象中元素的顺序