2010-11-30 4 views
3

가능한 한 명확하게하려고 노력하지만, 제 질문이 완벽하지 않은 경우 용서해주십시오. 몇 줄의 데이터가있는 txt 파일이 있습니다. 예 :txt 파일의 행을 읽으십시오. [java]

123 랄 보즈 20000 200 1 2

256 에드 쉐인 30,000 100 2 4

... I 각 행을 순차적으로 판독하는 방법에 다시 전달할 필요

처리를위한 별도의 클래스. StringTokenizer를 사용하여 각 줄을 요소로 나누는 방법을 알고 있습니다.

그러나 한 번에 한 줄씩 읽는 방법을 잘 모르겠지만 요소를 다른 클래스로 다시 전달한 다음 처리가 완료되면 NEXT 줄을 읽는 방법을 모르겠습니다. 내 클래스 사이의 메서드 협력이 잘 작동하지만 (한 번에 한 줄씩 읽는 방법)?

나는 각 줄이 배열 요소가 될 것이라고 생각했지만 배열 수는 알 수 없으므로 최종 길이를 알 수 없으므로 배열을 만들 수 없다.

감사

바바

편집

거친 설정 :

클래스 A

end_of_file = f1.readRecord(emp); 

     if(!end_of_file) 
     { 
      slip.printPay(slipWrite); 
     } 

클래스 B

public boolean readRecord(Employee pers) throws IOException { 

     boolean eof = false ; 

     String line = in.readLine() ; 

       ??? 

       } 

파일 이름은 내가 첫 번째 라인을 읽을 수 있습니다 여기까지 지금까지

주위에 전달되지 않습니다하지만 난 다시에 하나씩 읽어 줄을 반복 할 수있는 방법을 필요가 있다고 생각 그리고 클래스 사이에.

까다로운 ...

답변

4

한 번에 한 줄씩 읽는 방법은 다양합니다. Scanner 아마 가장 쉬운 방법입니다 :

final Scanner s = new Scanner(yourFile); 
while(s.hasNextLine()) { 
    final String line = s.nextLine(); 
    YourClass.processLine(line); 
} 
+0

안녕 마이클 작동 희망 ... 할 수 있습니다. 내 설치 프로그램에서 파일 이름을 사용할 수 없다고 생각합니까? – raoulbia

+1

@Baba'yourFile'은 실제로 파일 이름이 아닌 ['File'] (http://download.oracle.com/javase/6/docs/api/java/io/File.html) 인스턴스입니다. 별로 중요하지 않습니다. 나는 완전히 당신이 게시 한 코드를 이해하지 못한다. 이 코드는 파일의 각 줄을 읽고 그 전체 줄을'YourClass.processLine'에 전달합니다. 그게 네가 찾고있는거야? 그 외에 무엇이 필요합니까? –

+0

내 문제는 end_of_file 부울 것 같습니다. 해당 부울이 true로 설정되지 않을 때까지 처리 (printPay())를 입력하지 않습니다. 그러나 나는 내가 처리 IF 문을 입력하는 방법에 관해서 혼란 스러울 정도로 각 줄을 읽었을 때까지 그렇게 할 수 없다. 내 readRecord 메서드를 재 작업해야 할 것 같아요. – raoulbia

3
void readLine(String fileName) 
{ 
    java.io.BufferedReader br = null; 
    try 
    { 
     br = new java.io.BufferedReader(new java.io.FileReader(fileName)); 
     String line = null; 
     while(true) 
     { 
      line = br.readLine(); 
      if(line == null) 
      break; 
      // process your line here 
     } 
    }catch(Exception e){ 
    }finally{ 
    if(br != null) 
     { 
     try{br.close();}catch(Exception e){} 
     } 
    } 
} 

또한 당신이 ... 문자열을 분할

문자열 클래스 split 방법을 사용합니다. 분할 공간에 따라 위해 ... 당신은

line.split("\\s*") 내가 대략 협력을 설명하기 위해 시도하는 코드의 비트를 추가 한, 그것은

+1

그것은 당신에게 달렸지 만, 이런 상황에 대한 일반적인 관용구는'while (true)'와'break'가 필요하지 않고'while ((line = br.readLine())! = null)'입니다. –

+0

@ 마이클 : 물론 코딩하는 동안 내가 언급 한 표준을 따르십시오 ... 그러나 명확성을 위해 나는 추가 단계로 세분했습니다 :) – Favonius

관련 문제