JAVA - 如何创建对象数组?

时间:2013-05-28 08:05:48

标签: java arrays class object csv

我需要将CSV文件读入对象数组。 我没有意识到它必须进入一个,而只是制作了一个ArrayList。我现在需要解决这个问题,并且不知道我在做什么。

这是我将CSV文件读入多维数组的代码。

public static void readClub() throws IOException {
        BufferedReader clubBR = new BufferedReader(new FileReader(new File("nrlclubs.txt")));
        String line = "";

        ArrayList<String[]> clubsArr = new ArrayList<String[]>(); 

        while ((line = clubBR.readLine()) != null) { 

            String[] club = new String[3]; 

            for (int i = 0; i < 3; i++) { 
                String[] value = line.split(",", 3);
                club[i] = value[i]; 
            }

            clubsArr.add(club); 
        }

我的CSV文件的片段是:

Glebe,G Shield,Glebe District
Cumberland,C Shield,Central Cumberland
Annandale,A Shield,Annandale District
University,Lion,Sydney Uni Rugby League Club
Souths,Rabbit,South Sydney,Rabbitohs
Easts,Rooster,Eastern Suburbs,Roosters,Sydney Roosters
Balmain,Tiger,Tigers,Balmain Tigers
Newtown,Jets,Jets,Newtown Jets,Bluebags

第一个词是团队名称,第二个词是团队吉祥物,其余的是别名。

现在的问题是,我如何做同样的事情,但是使用一个对象数组(在一个名为Clubs的类中)? 我只是花了几个小时试图让它工作,只是被告知它的错误,而对象阵列正在我的脑袋:'(

谢谢堆!

修改: 好的,实际问题是: 程序应该将数据文件(NRLclubs.txt)的内容读入内存到适当的对象数组中(有关该类的描述,请参见上一页)。不要认为文件存在。

该课程的描述如下: 俱乐部级:俱乐部级别代表比赛中的个人NRL俱乐部。俱乐部级别需要存储当前俱乐部名称,当前俱乐部吉祥物,俱乐部已知或已知的任何别名的数据。除了应该为类创建的常规方法(例如,构造函数,'setter'和'getters')之外,您还需要根据赋值规范的一般要求来确定此类的适当方法。

2 个答案:

答案 0 :(得分:4)

创建一个包含行数据的新类。 在最简单的情况下,您可以创建一个这样的类:

class MyClass {
     public String column1;
     public String column2;
     public ArrayList<String> aliases = new ArrayList<String>();

     public void addAliases(String[] a){
        for(int i=2;i<a.length;i++){
           aliases.add(a[i]);
        }
     }
}

然后像这样更改您的ArrayList:ArrayList<MyClass> clubsArr = new ArrayList<MyClass>();

和你的阅读部分如下:

while ((line = clubBR.readLine()) != null) { 

        MyClass club = new MyClass; 

        String[] value = line.split(",", 3);
        club.column1 = value[0]; 
        club.column2 = value[1]; 
        // etc...
        clubsArr.add(club); 

    }
    MyClass[] clubs = clubsArr.toArray();

通过这种方式,您稍后可以通过使用其属性名(在本例中为.column2)而不是某些索引来获取其中一个对象的值,而不必考虑一些索引。

请注意,您可以根据自己的喜好调用班级中的属性(例如clubname而不是column1

编辑(帮助编辑OP) 要检查文件是否存在,请替换该行 BufferedReader clubBR = new BufferedReader(new FileReader(new File("nrlclubs.txt")));

File file = new File("nrlclubs.txt");
if(!file.exists()){
    System.exit(1); // no use to go any further if we have no input
}
BufferedReader clubBR = new BufferedReader(new FileReader(file));

答案 1 :(得分:0)

我不太了解你的问题,但也许你正在寻找这个:

public static void readClub() throws IOException {
        BufferedReader clubBR = new BufferedReader(new FileReader(new File("nrlclubs.txt")));

    String line = "";

    ArrayList<Clubs> clubs = new ArrayList<Clubs>();

    while ((line = clubBR.readLine()) != null) { 

        Clubs club = new Clubs();

        String[] value = line.split(",", 3);
        club.name = value[0]; 
        club.mascot = value[1];
        club.alias = value[2];

        clubs.add(club); 
    }

}