2012-12-21 74 views
9

我是一個業餘愛好者,當談到Java時,請原諒我的問題,如果它似乎愚蠢 :-P 我有以下代碼,它被設計爲計算文件:重置一個.nextLine()掃描器

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

所以它計算罰款,但是我想重新使用掃描儀用於其他用途,但nextLine已經移動到文件的最後一行,我想重置回它的第一行。

(相反,我不得不使用其他掃描儀的其他用途,對我來說這似乎比它應該是那麼優雅。)

我敢肯定,必須有一個計數器復位到一臺掃描儀方法零?

感謝

CJ

+0

什麼計數器?這個計數器在你的代碼中,而不是在'Scanner'中。 – 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,然後在不再需要時刪除自身。我的方式有它設置有從來沒有超過1臺掃描儀在ArrayList中,但ArrayList的是添加和刪除的對象很有用。