2013-05-28 22 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