2013-03-10 2 views
1

У меня проблема с чтением через .dat-файл. В настоящее время я знаю, как читать файл .dat/.txt, но для меня это немного сложно.Цитирование через файл, набор строк по строкам

Так у меня есть набор данных, как это:

test.dat

Sunday 
Scuba Diving Classes 
Mr.Jones 
N/A 
Yes 

Sunday 
Sailing 
Mr. Jackson 
N/A 
Yes 

Sunday 
Generation Next 
Ms.Steele 
N/A 
Yes 

Monday 
Helping Hands 
Ms.Wafa 
ANX0 
No 

Что мне нужно сделать с этим файлом, чтобы пройти через записи файла по записи, и если строка название деятельности. равнозначно Название деятельности (например, классы подводного плавания), переменные, начинающиеся с C, предназначены для просмотра. Вот кодирование для него:

try{ 
      BufferedReader reader = new BufferedReader(new FileReader("test.dat")); 

       int numberOfLines = readLines(); 
       numberOfLines = numberOfLines/6; 

       for(int i=0;i < numberOfLines; i++) 
       { 
        String CDay = reader.readLine(); 
        String CActivityName = reader.readLine(); 
        String CSupervisor = reader.readLine(); 
        String CLocation = reader.readLine(); 
        String CPaid = reader.readLine(); 
        String nothing = reader.readLine(); 

        if(CActivityName.equals(activityName)) 
        { 
         txtDay.setText(CDay); 
         txtSupervisor.setText(CSupervisor); 
         txtLocation.setText(CLocation); 

         //If it Activity is paid, then it is shown as paid via radiobutton 
         if(CPaid.equals("Yes")) 
           { 
            radioYes.setSelected(rootPaneCheckingEnabled); 
           } 
         if(CPaid.equals("No")) 
           { 
            radioNo.setSelected(rootPaneCheckingEnabled); 
           } 
        } 
        else 
        { 
         reader.close(); 
        } 
       } 
     } 
     catch(IOException e) 
     { 
       Logger.getLogger(AddActivity.class.getName()).log(Level.SEVERE, null, e); 
     } 
    } 

Я использовал переменную numberoflines пройти через файл, но моя логика несовершенна, и я понятия не имею, как пройти через этот

Текущее состояние и погрешность метода

в настоящее время этот метод читает только первые записи Scuba Diving Классы, и не проходит через весь файл, когда, если условие ложно.

Помощь!

+2

Вы закрывая читателя, как только вы встретите действие, имя которого не равно activityName. Не. –

+0

Это сработало !!! Не видел моей логической ошибки Спасибо! – Geuni

ответ

2

В настоящее время этот метод ... не проходит весь файл, если условие if является ложным.

Чтобы понять, почему, взгляните на else блока:

else 
{ 
    reader.close(); 
} 

Это означает, что вы закрываете BufferedReader до того как вы закончили чтение файла. Вам не нужно ничего класть в блок else.

+0

Ну JB Nizet дал мне ответ всего минуту назад, но все же, спасибо + ясное объяснение! – Geuni

1

Я вижу, что комментарий JB Net помог вам. Кроме того, в общем, вы должны закрыть переменную IO (файл, данные или другие) в финальном блоке, как так:

InputStream is = null; 
try{ 
    //open streams, do work 
}catch(...){ 

}finally{ 
//seperate try catch here to make sure it does not affect anything else, just close one resource per try catch 
try{ 
    if(is != null){ 
     is.close() 
    }catch(Exception ...){ 
     //one line log 
    } 
} 

В Java 7 вы должны попробовать с ресурсом, но не пробовал :)

+0

Есть ли возможность для будущих ошибок блока finally нет? Извините, я новичок и не слишком хорошо знаком с блоком finally ... – Geuni

+1

Не уверен, что я тебя понял. Вы спрашиваете, могут ли быть ошибки, если вы не используете блок finally? Если да, то это может привести к тому, что файлы, которые вы не можете записать, когда ваша программа запущена, или сокеты, и другие ручки, которые вы исчерпали вашей программой. Более важно в итеративной обработке/серверных приложениях – tgkprog

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