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

标签 java java.util.scanner

我当前创建的代码存储文本文件的第一行,创建一个新的 Vehicle 对象并将其放入数组中第一个 null 位置,并将同一行存储在数组中的每个 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

//编辑\ 限制:我无法创建任何新的公共(public)方法或构造函数,并且无法拥有任何其他类级别数据

最佳答案

您正在 readRecord循环方法,即使这意味着只存储一个对象,不是吗?

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

您似乎更有可能应该有一种方法来读取文件中的所有内容,填充 List<Vehicle>并归还它。例如:

public List<Vehicle> readVehicles(String file)
{
    Scanner reader = new Scanner(file);

    List<Vehicle> vehicles = new ArrayList<Vehicle>();
    try
    {
        while (reader.hasNextLine())
        {
            vehicles.add(Vehicle.readFromScanner(reader));
        } 
    }
    finally
    {
        reader.close();
    }
    return vehicles;
}

// In vehicle
public static Vehicle readFromScanner(Scanner scanner)
{
    String make = reader.next();
    String model = reader.next();
    int year = reader.nextInt();
    String vin = reader.next();
    // Don't use double for currency values
    BigDecimal value = reader.nextBigDecimal();
    int milesDriven = reader.nextInt();
    // Shouldn't this be some sort of date type?
    int lastOilChange = reader.nextInt();

    // I'll assume you have a constructor like this
    return new Vehicle(make, model, year, vin, value, milesDriven,
                       lastOilChange);
}

关于java - 逐行读取文本文件并将对象存储在数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8410955/

相关文章:

java - 用连续范围的短裤填充列表

Java Scanner 不等待用户输入

Java无法获取数组列表来打印?

java - 在Java中,使用Scanner,有没有办法在CSV文件中查找特定字符串,将其用作列标题并返回其下的所有值?

Java 验证用户整数输入

java - 如何使用改造添加具有多个值的参数?包括@Field和@Query

java - 将字节与 0b1111_1111 按位与有何作用?

java - 单击不同按钮时如何在 Fragment 的 Textview 中设置不同的字符串?

java - 如何实例化AsyncTask

java - (Java) 从文件读取时如何跳过空格?