2015-06-05 4 views
1

Прошу простить, я относительно новичок в Java.Как сохранить строки текстовых файлов для последующего использования в Java

В принципе, я хочу получить строку для текстового файла для последующего использования после выбора файла через filechooser.

Это фрагмент кода, который я написал до сих пор.

public void actionPerformed(ActionEvent e){ 
    if(e.getSource() == openButton){ 
     returnVal = fileChooser.showOpenDialog(null); 
     if(returnVal == JFileChooser.APPROVE_OPTION){ 
      file = fileChooser.getSelectedFile(); 

      //read file 
      try{ 
       br = new BufferedReader(new FileReader(file)); 
       while((currentLine = br.readLine()) != null){ 
        if(currentLine.startsWith(organismId)){ 
        // if(Character.isDigit(currentLine.charAt(7))){ 
        System.out.println(currentLine); 
       }} 
      } catch (Exception error){ 
       error.printStackTrace(); 
      } 
     } 
    } 
} 

В основном у меня есть переменная (организмаId), которая определяется путем ввода пользователем через графический интерфейс пользователя. Из этого я могу распечатать строки, которые начинаются с выбранной переменной String. Однако это не совсем то, чего я хочу достичь. Я хочу иметь возможность собирать текст, который присутствует на следующей строке, до тех пор, пока не будет достигнут символ «>».

Затем я хочу получить среднюю длину символа для текста для каждого другого организма (т. Е.> Ggo и> hba).

I.e. пример того, что текстовый файл может выглядеть следующим образом:

> ГГО

Это пример приговорить

> ГГО

Это еще один пример предложение

> ГГО

Это еще одно примерное предложение, которое чрезвычайно длинное и может переходить на более чем одну линию, как показано здесь

> HBA

Это предложение с другим organismId

Я надеюсь, что все это имеет смысл, и любая помощь будет оценена.

Большое спасибо! :)

ответ

2

Этот фрагмент кода должен быть решением вашей проблемы. printLines используется для начала печати линий после обнаружения вашего организма. Цикл while продолжается, и если другой организм не обнаружен, линия печатается. Но когда достигнут новый организм (обозначается >, я считаю), то printLines устанавливается на false.

ArrayList<String> organisms = new ArrayList<String>(); 
boolean printLines = false; 
StringBuilder organism = new StringBuilder(); 
while((currentLine = br.readLine()) != null) { 
    if (printLines) { 
     if (currentLine.startsWith(">")) { 
      // We have reached the next organism, so stop printing 
      printLines = false; 
      // Add the current organism to our collection 
      organisms.add(organism.toString()); 
      // Clear the StringBuilder, ready for the next organism 
      organism.setLength(0) 
     } 
     else 
     { 
      // We are still printing the current organism 
      organism.append(currentLine); 
     } 
    } 

    if(currentLine.startsWith(organismId)) { 
     // Print this line, and start printing all lines after this 
     organism.append(currentLine); 
     printLines = true; 
    } 
} 

Дайте мне знать ниже, если у вас есть вопросы или комментарии.

Редактировать В соответствии с запросом в комментариях отредактированы для добавления значений в ArrayList.

+0

Если это ответили на ваш вопрос, пожалуйста, примите ответ. – Rossiar

+0

Спасибо за быстрый ответ и извините за задержку ответа. Я не вставляю код в нужное место, я не уверен. С фрагментом кода выше он по-прежнему печатает только текущую строку. Однако я хочу напечатать то, что находится на следующей строке, пока не появится «>», не включая текущую строку. Еще раз спасибо! – Matt

+0

Хорошо, мне удалось исправить это. Последняя строка должна быть 'printLines = true', а не false, но остальная часть кода была великолепной! Большое спасибо! :) – Matt

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