2013-05-28 23 views
0

我需要将CSV文件读取到对象数组中。 我没有意识到它必须进入一个,而只是做了一个ArrayList。我现在需要解决这个问题,不知道我在做什么。JAVA - 如何创建一个对象数组?

这是我的代码,将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 

的第一个字是团队的名字,第二个字是球队的吉祥物,其余的都是别名的。

现在的问题是,我如何做同样的事情,但与对象数组(在一个名为俱乐部类)? 我只花了试图让这个工作几个小时,却被告知其错误的,对象数组是做我的头:“(

感谢堆

编辑: OK,实际的问题是这样的: 程序应该将数据文件(NRLclubs.txt)的内容读入适当的对象数组中(请参阅上一页了解类的描述)。不要认为文件存在。

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

+0

我不明白非常weel:你想要那个变量_clubsArr_是一个Object的数组而不是一个ArrayList?还是另一回事? – alepuzio

+0

您想要从文件中读取数据并将其保存到对象数组中?请更具体一些。 – Marek

+1

对于更优化的代码,行'String [] value = line.split(“,”,3);应该在'for'之外,它不需要每次都被分割。实际上,整个'for'不是必需的,你可以做'clubsArr.add(value);'。 – Djon

回答

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

EDIT(帮助OP的编辑) 要检查,如果该文件存在,与

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)); 
+0

OP说*在一个类叫做俱乐部*。 – johnchen902

+2

clubsArr.toArray()应该在循环之外。 – BobTheBuilder

+1

更好地使用'clubsArr.add(new Clubs(value [0],value [1],value [2]));'与私有成员字段构造函数。 –

0

更换线 BufferedReader clubBR = new BufferedReader(new FileReader(new File("nrlclubs.txt")));

我不明白你的问题很好,但也许你正在寻找:

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

}

+0

感谢您的快速回复。为了帮助澄清我正在尝试做的事情,我编辑了原始帖子 – user2427023

+0

我的回答能让你满意吗? – Marek

+0

恩,有点:) 我可以用它作为参考。谢谢你的帮助! – user2427023