从Java中的TXT文件以数组形式导入数据
我想将其作为数组导入。数据类别如下:
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个数据。如果不止一个,它将给出错误ArrayoutOfBond异常
我使用while循环,这样只要nextLine不为null,它就会循环。这是我的代码:
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
# 1 楼答案
ArrayOutOfBounds异常发生在您在pastebin中发布的代码中;您有一个for循环,循环n+1次,它总是比阵列中SSD的数量多1次。这是令人不快的for循环:
要修复它,只需将
<=
更改为<
,这样循环就可以进行,但不包括n
,因为它是从0开始的,而不是从1开始的。应该是这样的:# 2 楼答案
问题在于拆分行
String tmp[] = line.split("\t");
从txt
ssd[0].brand = Samsung;
中取第一行,split的输出与输入ssd[0].brand = Samsung;
相同因此
tmp[]
将只包含tmp[0] = ssd[0].brand = Samsung;
。 当你尝试访问tmp[1]
时,你会得到你问题的解决方案