Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 逐行读取文件,同时将对象存储在每行的数组中_Java_File_Object - Fatal编程技术网

Java 逐行读取文件,同时将对象存储在每行的数组中

Java 逐行读取文件,同时将对象存储在每行的数组中,java,file,object,Java,File,Object,我有一个最多可以读取4行的文本文件。每一行都有由制表符隔开的字符串和整数的混合体 我已经成功地使我的程序读取1行,并将所有信息存储在适当的位置,同时在数组中存储一个新对象 问题是:我不知道如何让它读取多行,同时根据读取的行在数组中存储一个新对象 下面是我的方法,它获取文件并在数组中存储对象: public void addVehicle(Vehicle Honda[]) throws FileNotFoundException { Scanner reader = new Scanner

我有一个最多可以读取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.");
        }
}

如果您只能成功存储一个车辆实例,那是因为您太早关闭了读卡器

在addVehicle()中,除去

reader.close();
reader.close();
在readRecord()中,去掉

reader.close();
reader.close();

关闭addVehicle()末尾的读卡器。

终于解决了我的问题

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;
}
public boolean addVehicle(车辆[]本田)抛出FileNotFoundException
{
布尔值=false;
int位置=0;
如果(canAddVehicle()==真)
{
对于(int i=0;i
您要调用两次“reader.close()”您如何声明vehicles数组的长度并初始化它?我还建议您多阅读一些Java约定——您没有完全正确地遵循大多数语法约定。例如,本田不应该被资本化。通常只有类别是大写的。另外,我建议将括号移到数组的左侧,如
Vehicle[]honda
if(canAddVehicle()==true)
相当于
if(canAddVehicle())
。另外
Scanner reader=新的扫描仪(文件)
块中有代码,则可以将其移动到
块中。在循环结束之前不要关闭
读卡器
。这很有帮助,但它现在只读取文件的最后一行