2012-12-21 3 views
9

Java에 관해서는 아마추어 순위이므로 :: 나는 다음 행의 수를 계산하도록 설계된 코드를 가지고 있습니다. 파일 :.nextLine() 스캐너 재설정

while (scanNumOfLines.hasNextLine())  
    { 
    NumOfLines ++; 
    scanNumOfLines.nextLine(); 
    } 
    System.out.println("NumOfLines = "+NumOfLines); 

그래서 그것을 잘 계산,하지만 난 다른 용도로 스캐너를 다시 사용하기를 원하지만 꽵은 파일의 마지막 행으로 이동하고 있으며, 나는 다시 재설정 할 첫 번째 줄.

은 (대신, 나는 다른 목적을 위해 다른 스캐너를 사용했고, 나에게이 그것이 있어야보다 덜 우아 보인다.)

I가 카운터를 재설정 스캐너 방법이 있어야 확신 제로?

감사

CJ

+0

어떤 카운터입니까? 이 카운터는 '스캐너'가 아니라 코드에 있습니다. – EJP

답변

4

당신은 Scanner 재 선언해야합니다. nextLine()을 호출하면 해당 행이 버퍼에서 제거되고 Scanner에서 효과적으로 삭제됩니다.

그래서 기본적으로 거기에 입니다. 이렇게하는 방법은 생성자입니다.

Scanner scanNumOfLines = new Scanner(myFile); 

Scanner 개체에는 "카운터"가 없습니다. 대신 그것을 컨베이어 벨트와 같이 생각하십시오. 벨트에는 무엇이 있는지에 대한 지식이나 관심이 없습니다. 아이템이 남아있는 동안 그냥 뱉어내는 것뿐입니다. 그리고 일단 당신이 그것들을 가져 가면, 그것들은 선을 위해 사라집니다.

8

이것은 불가능합니다.

포함하지 않는 이유는 지원하는 다양한 입력 유형입니다. 한 가지 예가 스트림입니다. 전달 된 결과는 저장되지 않으므로 재설정을 지원하지 않습니다.

우아한 방법은 새로운 Scanner을 만드는 것입니다. 많은 사용자 정의 설정을 제공하는 경우 팩토리 메소드를 작성하십시오.

0
File file = new File("StoreData.txt"); 

Scanner reader = new Scanner(new FileInputStream(file)); 
while (reader.hasNext()) { 
     k++; 
     reader.nextLine(); 
} 
reader.close(); 
reader=null;  
//reset scanner   
reader=new Scanner(new FileInputStream(file)); 
while (reader.hasNext()) { 
    System.out.println(reader.nextLine());    
} 
+2

코드 만? 당신의 설명은 어디에 있습니까? –

1

나는이 이미 대답했습니다 실현하지만이 물건을 찾고 있다면 다른 확실히 사람이 너무 해요, 그래서 내가이 문제를 해결했다 방법을 기여할 거라고 생각 : 로를 내 문제는 내가 사용자 입력을 기반으로 여러 번 파일을 읽는 것이 필요했다. 테스트 클래스에는 파일을 읽는 스캐너의 ArrayList가 있으며 더 이상 필요하지 않으면 자체를 삭제한다. 내가 설정 한 방법은 ArrayList에 스캐너가 하나도 넘지 않지만 ArrayList는 객체를 추가하고 제거하는 데 유용합니다.

관련 문제