2016-05-10 5 views
0

Мне нужно прочитать txt-файл и сохранить мои данные в treeSet.читать из txt и добавлять в treeet

public class UrbanPopulationStatistics { 

private Set<UrbanPopulation> popSet; 
private File file; 
private BufferedReader br; 

public UrbanPopulationStatistics(String fileName) throws IOException { 

    this.popSet = new TreeSet<>(); 

    readFile("population.txt"); 
} 

private void readFile(String fileName) throws IOException { 


    try { 
     br = new BufferedReader(new FileReader(fileName)); 
     String line; 
     while ((line=br.readLine()) != null) { 


      String[] array = line.split("/"); 

      popSet.add(new UrbanPopulation(array[0], Integer.parseInt(array[1]), Integer.parseInt(array[4]))); 

     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    br.close(); 
} 

@Override 
public String toString() { 
    String s = popSet.toString().replaceAll(", ", ""); 
    return "UrbanPopulationStatistics:\n" + s.substring(1, s.length() - 1) + "\n"; 
} 


public static void main(String[] args) throws IOException { 
    UrbanPopulationStatistics stats = new UrbanPopulationStatistics("population.txt"); 
    System.out.println(stats); 
} 

} 

Я попытался превратить то, что буферизированная читатель читает в массив, а затем добавить его в мой TreeSet, но я получаю ошибку: Исключение в потоке «основного» java.lang.UnsupportedOperationException: Пока не поддерживается.

+0

Возможно, мне нужно добавить, что каждая строка в текстовом файле имеет 5 элементов, разделенных символом «/». Мне нужен первый элемент, который является строкой, а второй и последний - это числа. – gheithen

+0

Что вы подразумеваете под «но это, похоже, не работает для меня»? Исключено ли исключение? Неожиданный результат? – Frank

+0

Я получаю сообщение об ошибке в папке popSet.add. он говорит, ожидается – gheithen

ответ

0

Проблема с вашим кодом заключается в том, что вы не храните то, что вы читаете из буфера (и, следовательно, дважды читаете из буфера). Вы должны присвоить то, что вы читаете в переменном для проверки нуля, как показано ниже:

private void readFile(String fileName) throws IOException { 

     try { 
      br = new BufferedReader(new FileReader(fileName)); 
      String line = null; 
      while ((line = br.readLine()) != null) { 
       String[] array = line.split("/"); 

       popSet.add(new UrbanPopulation(array[0], Integer.parseInt(array[1]), Integer.parseInt(array[4]))); 

      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      br.close(); 
     } 
    } 

Также я хотел бы закрыть BufferedReader в конце концов блока, чтобы избежать утечек ресурсов.

+0

спасибо, я все еще получаю проблему с идентификатором в точке, где я пытаюсь добавить массив к treeSet – gheithen

+0

, как было предложено выше другими, это может быть из-за проблемы с компиляцией (из-за дополнительной точки в Integer.parseInt .() Попробуйте исправить это. Я обновил код с исправлением ошибки компиляции. – Vijay

+0

Я тоже его обновил. Теперь я получаю это сообщение: Исключение в потоке «main» java.lang.UnsupportedOperationException: пока не поддерживается – gheithen

2

У вас есть дополнительный период после parseInt по адресу Integer.parseInt.(array[4])));.

Будьте осторожны при написании кода. Синтаксические ошибки не отображаются «красиво», то есть сообщение об ошибке не очень полезно в большинстве случаев. Однако он показывает приблизительное местоположение ошибки.

+0

удалил его, все еще получая сообщение об ошибке – gheithen

+2

Ну, вы сделали та же ошибка на другом 'parseInt'. Давай, обратите внимание. – Kayaman

+0

Я удалил период! – gheithen

0

Я попытался воспроизвести ошибку, используя ваш код, но этого не произошло. Ваш код в порядке.

UnsupportedOperationException - это исключения, которые могут возникнуть при попытке добавить элемент в коллекцию.

Но TreeSet реализует метод добавления.

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