2011-12-07 43 views
2

我有一个文本文件,最多可以读取4行。每行都有由字符串隔开的字符串和整数的混合。一行一行地读取一个文件,同时为每一行存储一个数组中的对象

我已经成功地让我的程序读取1行并将所有信息存储在适当的位置,同时还将新的对象存储在数组中。

问题:我不知道如何让它读取多行,同时也根据读取的行读取数组中存储新的对象。

这里是我的方法,它采用的文件,并与存储阵列中的一个对象:

public void addVehicle(Vehicle Honda[]) throws FileNotFoundException 
{ 
    Scanner reader = new Scanner(file); 

     if(canAddVehicle() == true) 
     { 
     for(int i = 0; i < vehicles.length; i++) 
     { 
      if(vehicles[i] == null) 
      { 
       Honda[i] = new Vehicle(); 
       Honda[i].readRecord(reader); 
       vehicles[i] = Honda[i]; 
       reader.close(); 
       break; 
      } 
     } 
      System.out.println("Vehicle Added!"); 
     } 
     else 
     { 
      System.out.println("You can not add more than 4 vehicles."); 
     } 
} 

而且readRecord()方法:

public void readRecord(Scanner reader) 
{ 
    while(reader.hasNextLine()) 
    { 
     setMake(reader.next()); 
     setModel(reader.next()); 
     setYear(reader.nextInt()); 
     setvin(reader.next()); 
     setValue(reader.nextDouble()); 
     setMilesDriven(reader.nextInt()); 
     setLastOilChange(reader.nextInt()); 
    } 
    reader.close(); 
} 
+1

你正在调用两次“reader.close()” – ComputerSaysNo

+0

你是如何声明汽车数组的长度和初始化它?我还建议你更多地阅读一下你的Java约定 - 你没有完全遵循大部分的语法约定。例如,本田不应该被大写。通常只有班级大写。另外,我建议将括号移到数组的左侧,比如'Vehicle [] honda'。 – Andrew

+0

'if(canAddVehicle()== true)'等价于if(canAddVehicle())'。另外'扫描仪阅读器=新的扫描仪(文件);'可以移动到'if'块内。 –

回答

0

终于解决了我的问题!

public boolean addVehicle(Vehicle[] Honda) throws FileNotFoundException 
{ 
    boolean found = false; 
    int position = 0; 
     if(canAddVehicle() == true) 
     { 
      for(int i = 0; i < vehicles.length && !found; i++) 
      { 
       if(vehicles[i] == null) 
       { 
        position = i; 
        found = true; 
       } 
      } 

       Scanner reader = new Scanner(file); 
       while(reader.hasNext()) 
       { 
        Honda[position] = new Vehicle(); 
        Honda[position].readRecord(reader); 
        vehicles[position] = Honda[position]; 
        position++; 

       } 
       reader.close(); 
       return true; 
     } 
     return false; 
} 
3

如果你只能成功存储一个车辆例如,这是因为你很快关闭了阅读器。

在addVehicle(),摆脱

reader.close(); 

和readRecord(),GET)摆脱

reader.close(); 

在addVehicle年底关闭阅读器(。

+0

好了,但它只是读取文件的最后一行 – MJ93

相关问题