【问题标题】:How to read a file and put it into an array of objects?如何读取文件并将其放入对象数组中?
【发布时间】:2016-05-18 10:22:53
【问题描述】:

我有一个包含 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 文件,我只是删除了该行,现在它可以正常工作了。

【问题讨论】:

  • 到目前为止你做了什么?你能举一些例子吗?请提出更具体的问题。
  • 嘿伙计,你知道该怎么做。但这不是代码请求的地方。
  • 如果我知道该做什么我就不会问了,因为那是浪费时间...我查看了这篇文章stackoverflow.com/questions/23145416/…,我需要做类似的事情,但他每个都有一个属性行,我将所有属性都放在一行中,我只需要有人告诉我一种方法或在我阅读信息时需要分开的东西。或者我应该只将一整行读入一个字符串,然后从字符串中取出我需要的属性吗?对不起,如果我没有很好地解释自己,但我对 java 还不太了解
  • 要“分离内容”,您可以“拆分”您的输入。怎么样,需要自己去想。如果是字符串,可以使用分隔符进行拆分。如果是二进制,则需要知道记录格式并解析记录。
  • 感谢您的帮助。

标签: java arrays file object


【解决方案1】:

我对您的建议是创建一个自定义对象阅读器。自定义对象读取器将读取对象并将对象的数据分离成一些数据结构(数组等)。该对象可能会返回该结构。您可以为每一行使用一次此对象阅读器。当每个对象读取后返回数据结构时,您可以随心所欲地使用它。您当然可以采用这个想法并根据自己的喜好对其进行修改。如果您喜欢此回复,请接受。

【讨论】:

  • 当您谈论创建自定义对象阅读器时,您是在谈论创建一个将整行读取为字符串然后将该行拆分为我需要的每条信息的方法,对吗?
  • 如果您愿意,可能是这样。你说每一行都是一个对象,所以我的意思是一个接受对象的方法。但是,如果您有一行需要拆分的文本,那么是的,您可以在方法中读取一行并将其拆分。
  • 你能帮我解决我现在遇到的问题吗?
猜你喜欢
  • 1970-01-01
  • 2015-07-05
  • 1970-01-01
  • 2020-10-07
  • 2020-02-04
  • 2020-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多