从 Java 中的 TXT 文件导入数据作为数组

Import Data as Array from TXT File in Java

我想使用 Java 从 .txt 文件导入这样的数据。

我想将其导入为 数组。数据class是这样的:

class SolidStateDrive {
    String brand;
    String model;
    int capacityInGB;
}

所以如果来自 txt 文件的数组是硬编码的,那就是这样的:

ssd[0].brand = Samsung;
ssd[1].brand = Adata;

ssd[0].model = Evo970;
ssd[1].model = SU650;

ssd[0].capacityInGB = 512;
ssd[1].capacityInGB 240;

问题是,当我尝试读取 .txt 文件时,它只能存储第一行的 1 个数据。如果超过一个,就会报错 ArrayOutOfBound Exception.

我正在使用 while 循环,因此只要 nextLine 不为空,它就会循环。这是我的代码:

int n = 0;
    SolidStateDrive[] ssd = new SolidStateDrive[n+1];
    
        try  {
            BufferedReader br = new BufferedReader(new FileReader("SSD.txt"));
            String line = null;
            while((line = br.readLine()) != null) {
                    String tmp[] = line.split("\t");
                    ssd[n] = new SolidStateDrive();
                    ssd[n].brand = tmp[0];
                    ssd[n].model = tmp[1];
                    ssd[n].capacityInGB = Integer.parseInt(tmp[2]);
                n++;
            }
            
            br.close();
        } catch(IOException ex) {
            ex.printStackTrace();
        }

更新:我已经试过了,但也没用

SolidStateDrive[] ssd = new SolidStateDrive[2];

该文件中的完整代码:pastebin

您在pastebin 中发布的代码出现ArrayOutOfBounds 异常;你有一个循环 n+1 次的 for 循环,它总是比阵列中的 SSD 数量多 1。这是有问题的 for 循环:

for (int j=0; j<=n; j++) {
    System.out.println(j+ "\t" +ssd[j].brand+ "\t" +ssd[j].model+ "\t" +ssd[j].capacityInGB);
}

要修复它,只需将 <= 更改为 <,这样循环会上升到 n,但不包括 n,因为您是从 0 而不是 1 开始的. 它应该是这样的:

for (int j = 0; j < n; j++) {
    System.out.println(j + "\t" + ssd[j].brand + "\t" + ssd[j].model + "\t" + ssd[j].capacityInGB);
}

问题出在分割线String tmp[] = line.split("\t");

从 txt 中提取第一行 ssd[0].brand = Samsung; split 的输出与输入相同 ssd[0].brand = Samsung;

while ((line = br.readLine()) != null) {
    String tmp[] = line.split("\t");
    ssd[n] = new SolidStateDrive();
    ssd[n].brand = tmp[0];
    ssd[n].model = tmp[1];
    ssd[n].capacityInGB = Integer.parseInt(tmp[2]);
    n++;
}

所以 tmp[] 将只包含 tmp[0] = ssd[0].brand = Samsung;。 当您尝试访问 tmp[1] 时,您将获得

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1.

您的问题的解决方案,

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class ReadData {

    public static void main(String[] str) {
        readData();
    }

    public static void readData() {
        List<SolidStateDrive> ssd = new ArrayList<>();
        try (BufferedReader br = new BufferedReader(new FileReader("SSD.txt"))) {
            ssd = br.lines().map(s-> {
                String[] tmp = s.split("\s+");
                return new SolidStateDrive(tmp[0], tmp[1], Integer.parseInt(tmp[2]));
            }).collect(Collectors.toList());
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        ssd.stream().forEach(System.out::println);
    }

}

class SolidStateDrive {
    
    String brand;
    String model;
    int capacityInGB;

    public SolidStateDrive(String brand, String model, int capacityInGB) {
        super();
        this.brand = brand;
        this.model = model;
        this.capacityInGB = capacityInGB;
    }

    @Override
    public String toString() {
        return "SolidStateDrive [brand=" + brand + ", model=" + model + ", capacityInGB=" + capacityInGB + "]";
    }
}