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

Первое слово является именем команды, второе слово является талисманом команды, а остальные являются псевдонимами х.

Теперь вопрос в том, как я делаю то же самое, но с массивом объектов (в классе «Клубы»)? Я только что провел несколько часов, пытаясь получить эту работу, только чтобы быть сказанным его неправильно, и массив объектов делает мою голову: '(

Благодарность кучи

редактировать: нормально, фактический вопрос таков: программа должна прочитать содержимое файла данных (NRLclubs.txt) в память в соответствующий массив объектов (см. предыдущую страницу для описания класса). Не предполагайте, что файл существует.

Описание этого класса: Клубный класс: класс Club представляет собой индивидуальный клуб NRL в рамках соревнования. Класс Club должен хранить данные для текущего названия клуба, текущего талисмана клуба, любых псевдонимов, которыми клуб известен или был известен. Как и обычные методы, которые должны быть созданы для класса (например, конструкторы, «сеттеры» и «геттеры»), вам нужно будет выбрать подходящие методы для этого класса на основе общих требований спецификации назначения.

+0

Я не понимаю очень сильно: вы хотите, чтобы переменная _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 (чтобы помочь с OPS редактирования) Чтобы проверить, существует ли файл, заменить строку 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)); 
+0

OP сказал * в классе под названием Clubs *. – johnchen902

+2

клубыArr.toArray() должны находиться вне цикла. – BobTheBuilder

+1

И лучше использовать конструктор типа 'clubsArr.add (новые клубы (значение [0], значение [1], значение [2]));' с полями частных членов. –

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

}

+0

Благодарим вас за быстрый ответ. Чтобы уточнить, что я пытаюсь сделать, я отредактировал исходное сообщение – user2427023

+0

Отвечает ли мой ответ? – Marek

+0

Ум, вроде :) Я смогу использовать его в качестве ссылки. Спасибо за вашу помощь! – user2427023

Смежные вопросы