2015-02-18 5 views
0

Я пытаюсь прочитать файл CSV с использованием буферизованногоReader, но по какой-то причине я получаю исключение из пределов после 7 строк. Я пробовал этот точный алгоритм в другом CSV-файле (30 строк), и он работал нормально. Here - это файл CSV.Индекс массива за пределами чтения при чтении из файла CSV.

String spellPath = "file path is here"; 

    FileReader y = new FileReader(spellPath); 
    BufferedReader x = new BufferedReader(y); 
    ArrayList<Card> ArrayList = new ArrayList<Card>(); //dynamic data type 

for(String p = x.readLine(); p != null ; p = x.readLine()){ 

     String [] stArray = p.split(","); 
     ArrayList.add(new Card(stArray[1], stArray[2])); //new card with name and desc only 

    } 

    System.out.println(ArrayList.toString()); 

Проблема с файлом или с его помощью?

+1

использовать этот тип цикла while ((String s = br.readLine())! = Null) 'вместо цикла –

+0

По крайней мере, одна из ваших строк не содержит запятой. Похоже, что у вас есть новая строка в середине одной из ваших строк. – khelwood

ответ

0

Ошибка бросает здесь

String [] stArray = p.split(","); 
ArrayList.add(new Card(stArray[1], stArray[2])); 

Добавить это условие и проверить

String [] stArray = p.split(","); 
ArrayList.add(new Card(stArray[0], stArray[1])); 
+0

Ответ - это право на жизнь, которое устанавливает правильное направление. – DmitryKanunnikoff

1

Попробуйте это.

while(x.readLine() != null){ 
---`enter code here` 
} 
1

Вы звоните x.readLine() два раза в цикл. Следовательно, вы пропускаете строки во время чтения.

Лучше всего использовать CSVReader, а не буферизованный считыватель.

CSVReader reader = new CSVReader(new FileReader(fName), ',','"','|'); 
    List content = reader.readAll();//do not use this if CSV file is large 
    String[] row = null; 

    for (Object object : content) { 
     row = (String[]) object; 
     row = Arrays.toString(row).split(","); 
     //now you have a row array with length equal to number of columns 
    } 

Вот ссылка, чтобы получить CSVReader - CSVReader Download

1
while((String p = x.readLine()) != null){ 

    String [] stArray = p.split(","); 
    ArrayList.add(new Card(stArray[0], stArray[1])); //new card with name and desc only 

} 

System.out.println(ArrayList.toString()); 

это должна работать

2

Существует одна линия «получает 500 ATK и DEF для каждого спеллкарту вас есть на поле. " которые не содержат ,. Так stArray[] имеет длину 1.

Другое дело: массивы Java - это нулевая база.

И for(String p = x.readLine(); p != null ; p = x.readLine()){ должен быть while ((String p = x.readLine())!= null){

2

Ваш вопрос здесь является 2 последовательных вызовов на р = x.readLine()

for(String p = x.readLine(); p != null ; p = x.readLine()){ 
    ... 
} 

В связи с этим, 2 строки считываются и только 1 проверяется на нет.

Вам необходимо сменить петлю на

while (true) { 
    String p= x.readLine(); 
    if (p == null) break; 

    ... 
} 

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

  • Нет связанных вопросов^_^