【发布时间】:2014-01-13 21:06:50
【问题描述】:
我编写了一些代码来从 .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,并且它永远不会到达最终的控制台输出,表明该方法已完成。
【问题讨论】:
-
在调用任何方法之前,请确保
stringLine != null。 -
BufferedReader.hasNextLine()如果没有更多行要读取,则返回 false。在每个br.readLine()之前使用它
标签: java object io bufferedreader fileinputstream