逐行读取文本文件并在数组中存储对象

时间:2011-12-07 05:47:44

标签: java java.util.scanner

我当前创建的代码存储了文本文件的第一行,创建了一个新的Vehicle对象,并将其放在第一个null位置的数组中,并将相同的行存储在数组中的每个空值中。我需要它能够:

存储第一行的内容,然后在数组的第一个位置存储一个新的Vehicle对象,该对象为null。然后重复,直到没有更多的行。

我认为这是我的for循环的一个问题。 注 - 我需要使用Array而不是ArrayList

public void addVehicle(Vehicle[] Honda) throws FileNotFoundException
{

        if(canAddVehicle() == true)
        {
        for(int i = 0; i < vehicles.length; i++)
        {
            if(vehicles[i] == null)
            {
                Scanner reader = new Scanner(file);

                Honda[i] = new Vehicle();
                Honda[i].readRecord(reader);
                vehicles[i] = Honda[i];

                reader.close();
            }
        }
            System.out.println("Vehicle Added!");
        }
        else
        {
            System.out.println("You can not add more than 4 vehicles.");
        }
}

车辆类:

public void readRecord(Scanner reader)
{

    setMake(reader.next());
    setModel(reader.next());
    setYear(reader.nextInt());
    setvin(reader.next());
    setValue(reader.nextDouble());
    setMilesDriven(reader.nextInt());
    setLastOilChange(reader.nextInt());



}

数据文件:

Hyundai Sonata  2010    ABC236347NM2N2NW2   18455.34    8765    7567
Chevy   Blazer  1998    1234H32343LMN3423   29556.65    38559   38559

// EDIT \ Constraits :我无法创建任何新的公共方法或构造函数,也无法获得任何其他类级数据

2 个答案:

答案 0 :(得分:2)

你正在 {/ 1}}方法中循环,即使这只是存储一个对象,不是吗?

您可以删除readRecord循环 - 尽管这依赖于while调用者知道文件中有多少条目。

您似乎更有可能拥有一个方法来读取文件中的所有内容,填充addVehicle并返回它。例如:

List<Vehicle>

答案 1 :(得分: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;
}