2011-10-18 1 views
0

좋아, 그래서 Java 응용 프로그램을 작성하여 CSV 파일을 가져온 다음 결과를 반복하여 배열로로드합니다. 예외를 통해 발생하지 않기 때문에 파일을 올바르게 가져올 것입니다. 내 문제는 내가 FileInputStream 레코드 수를 계산하려고 할 때 나는 무한 루프에 갇혀있다. 여기서 문제가 될 수 있습니다. Heres는 코드 :FileInputStream을 반복 할 때 무한 루프

이() 이동 호출하는 Main 메서드 내 클래스 :이 클래스 PopularNames (팝)입니다

public void go() { 
    pop = new PopularNames(); 
    popGui = new PopularNamesGui(); 
    String file = popGui.userInput("Enter the correct name of a file:"); 
    pop.setInputStream(file); 
    pop.getNumberOfNames(); 
} 

하고, 아래 방법에 나는에의 InputStream VAR을 설정하고 새로운 FileINputStream 파일 이름은 사용자가 제공합니다.

public void setInputStream(String aInputStream) { 
    try { 
     inputStream = new Scanner(new FileInputStream(aInputStream)); 
    } catch (FileNotFoundException e) { 
     System.out.println("The file was not found."); 
     System.exit(0); 
    } 
} 

이것은 문제 해결 방법입니다. 나는 단순히 FileInputStream에 통해 반복 및 레코드의 수를 계산하고 여기서

public void getNumberOfNames() { 
    while (this.inputStream.hasNext()) { 
     fileDataRows++; 
    } 
} 
+2

을 그것은 실제로'Scanner' 무언가의 이름'inputStream'를 사용하는 것은 좋은 생각입니다. 그것은 잠시 동안 선언을 보지 않을 때 매우 혼란스럽고, 실제'InputStream'에서 유효하지 않은 메소드 호출을 보게됩니다. 비슷하게'aInputStream'은 실제로'filename' 또는 이와 유사한 것처럼 들립니다. –

+0

Jon이 말한 바 (+1), 합리적인 명명 표준을 따르지 않는 것은 "** 정말 ** 나쁜 생각입니다."라고 다시 말합니다. – Bohemian

답변

6
public void getNumberOfNames() { 
    while (this.inputStream.hasNext()) { 
    inputStream.nextLine(); // Need to read it so that we can go to next line if any 
    fileDataRows++;  
    } 
} 
+0

동의합니다. next() 및 hasNext()와 관련하여 http://download.oracle.com/javase/1,5,0/docs/api/java/util/Iterator.html#next()를 참조하십시오. – rit

+0

@Walter : 예 .You 이미 전체 파일을 읽었습니다. –

+0

이것은 작동했습니다 ... 그러나 배열로 파일을 읽으려고 할 때 (다른 방법으로), 다음과 같은 오류가 나타납니다 : No line found ... why? –