0

我需要将 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 俱乐部。Club 类需要存储当前俱乐部名称、当前俱乐部吉祥物、俱乐部已知或已知的任何别名的数据。除了应该为类创建的常规方法(例如,构造函数、“setters”和“getters”)之外,您还需要根据赋值规范的一般要求来决定该类的适当方法。

4

2 回答 2

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();

这样,您稍后将能够通过使用其属性名(在本例中为 example .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));
于 2013-05-28T08:12:58.757 回答
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); 
    }

}

于 2013-05-28T08:15:45.040 回答