我有一个包含90个对象的文件,每个对象有20个属性。文件的每一行都有1个对象,所以我需要读取一行并分离所有这20个属性,这样我就可以填充对象中需要的所有信息,然后将该对象放在一个对象数组中。
我在SO上发现了一个问题,它做了类似的事情,但每行只有一个属性,所以他们只需要读一行并将该行放入每个属性中,我的问题是我在一行中有20个属性,我怎么能把他们分开?
编辑1:
感谢所有帮助过的人,但现在又遇到了另一个问题。 我的代码如下:
public void loadGang(){
String currentline;
Gang g =new Gang();
String[] result= new String[50];
BufferedReader info;
try {
info = new BufferedReader(new FileReader("Gangs.txt"));
for(int i=0;i<90;i++){
currentline= info.readLine();
result=currentline.split(" ");
g.setName(result[0]);
g.setHire(Integer.parseInt(result[1]));
g.setUpkeep(Integer.parseInt(result[2]));
g.setCombat(Integer.parseInt(result[3]));
g.setDefense(Integer.parseInt(result[4]));
g.setTechlevel(Integer.parseInt(result[5]));
g.setStealth(Integer.parseInt(result[6]));
g.setDetect(Integer.parseInt(result[7]));
g.setChaos(Integer.parseInt(result[8]));
g.setControl(Integer.parseInt(result[9]));
g.setHeal(Integer.parseInt(result[10]));
g.setInfluence(Integer.parseInt(result[11]));
g.setResearch(Integer.parseInt(result[12]));
g.setStrenght(Integer.parseInt(result[13]));
g.setBlade(Integer.parseInt(result[14]));
g.setRange(Integer.parseInt(result[15]));
g.setFighting(Integer.parseInt(result[16]));
g.setMarts(Integer.parseInt(result[17]));
listgang.add(g);
System.out.println(listgang.get(i).getName());
}
info.close();
} catch ( IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
我有“线程中的异常”主“java.lang.ArrayIndexOutOfBoundsException:1 在Game.loadGang(Game.java:30)“ 所以这适用于文本文件的7行,但它停在那里,我认为“currentline = info.readLine();”存在某种问题。部分是因为我尝试在那里打印,所以我可以看到它是否有效,但当它到达那条线时它没有产生任何输出所以可能问题在那里?这应该是一个数组越界的问题,但我看不到哪里,任何想法?
编辑2: 我想文件中存在问题或者其他因为我试图通过检查结果的长度来检查是否发生了拆分,我看到在该行中输出为1所以在该行中发生了某些事情......
编辑3: 我做的!在记事本中我看不到文件中的空白行或其他内容,但是我打开了写字板的.txt文件,我刚删除了该行,现在它工作正常。
答案 0 :(得分:0)
我给你的建议是创建一个自定义对象阅读器。自定义对象读取器将读入对象并将对象的数据分成一些数据结构(数组等)。该对象可能会返回该结构。您可以为每一行使用此对象读取器一次。在每个对象读取后返回数据结构时,您可以根据需要进行操作。你当然可以接受这个想法并根据自己的喜好进行修改。如果你喜欢这个回复,请接受它。