2013-03-10 5 views
1

.dat 파일을 읽는 데 문제가 있습니다. 현재 .dat/.txt 파일을 읽는 방법을 알고 있지만이 파일은 다소 까다 롭습니다. 그래서줄 단위로 파일을 반복합니다.

이 같은 데이터의 집합이 있습니다

내가이 파일로해야 할 것은 기록에 의해 파일 레코드를 통해 이동하는 것입니다

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 

TEST.DAT을하고있는 경우 문자열 activityname. 활동 이름 (예 : 스쿠버 다이빙 클래스)과 같음 으로 시작하는 변수는으로 설정됩니다. 여기에 대한 코드입니다 : 내가 파일을 통해 이동합니다 numberoflines 변수를 사용했습니다

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

,하지만 내 논리는 결함이, 내가 어떻게

현재 상태를 통해 이동하는 생각이없고,

방법의 오류는 현재이 방법은 첫 번째 기록 스쿠버 다이빙 수업을 읽고, 만약 조건이 거짓 일 때 전체 파일을 통과하지 않습니다.

도움말!

+2

: 것을 시도하지 않은 이름이 activityName과 같지 않은 활동을 만 v 고 즉시 독자를 닫습니다. 하지마. –

+0

그게 효과가! 내 논리 결함을 보지 못했습니다 감사합니다! – Geuni

답변

2

현재이 방법은 if ​​조건이 거짓 일 때 전체 파일을 통과하지 않습니다.

else 블록에서 살펴 이유를 파악하려면이 파일을 읽기 완료하기 전에 당신이 BufferedReader을 닫는 것을 의미

else 
{ 
    reader.close(); 
} 

. 거기에 else 블록에 아무것도 넣지 않아도됩니다.

+0

글쎄, JB Nizet이 나에게 1 분 전에 답을 주었지만 여전히 감사합니다. – Geuni

1

JB Net comment가 도움이되었습니다. 또한 일반적으로 마침내과 같이 A 동에서 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 
    } 
} 

을 자바 7에서는 자원과 노력하지만 당신이있어

+0

finally 블록의 향후 오류가 존재하지 않을 가능성이 있습니까? 미안 해요. 새롭고 마침내 블록에 익숙하지 않아. – Geuni

+1

잘 모르겠다. finally 블록을 사용하지 않으면 오류가 발생할 수 있습니까? 그렇다면 프로그램이 실행 중일 때 쓸 수없는 파일이나 프로그램에서 소켓 및 기타 핸들을 다 써 버릴 수 있습니다. 반복적 인 처리/서버 어플리케이션에서 더욱 중요합니다. – tgkprog

관련 문제