2011-05-06 16 views
0

在下面的代碼中,我希望第二個while循環從第一個while循環使用的同一個文件的第二行讀取。從現在開始,第二個while循環從文件的第三行讀取。 我可以通過使用另一個緩衝讀取器來完成。但是還有更好的方法嗎?如何使緩衝閱讀器從開始讀取而不是使用另一個對象

filename = data1 
readFile = new File(filename); 
BufferedReader reader = null; 
try 
{ 
    reader = new BufferedReader(new FileReader(readFile)); 
} 
catch (IOException ioe) 
{ 
    System.err.println("Error: " + e.getMessage());  
} 
String newline; 
int secondRecord = 0; 
while((secondRecord < 2) && ((newline = readline(reader)) != null)) 
    { 
    System.out.println(newline); 
      secondRecord ++; 
    } 

while ((newline = readline(reader)) != null) 
    { 
    System.out.println(newline); 
    } 
+0

當您收到異常時,最好不要繼續,因爲它沒有發生。 – 2011-05-06 11:21:38

回答

1

BufferedReader支持mark()reset()。因此,你應該在第一次循環之前調用mark(),在它之後調用reset(),然後它應該能夠再次讀取相同的行。

當然,只有在文件不太大的情況下才能做到這一點,因爲BufferedReader必須將所有內容都保存在內存中。

+0

是的。這也是一個正確的答案。 – randeepsp 2011-05-06 12:23:29

0

我會將文件讀入列表並按列表處理列表。

List<String> lines = FileUtils.readLines(readFile); 
for(String line: lines.subList(0,2)) 
    System.out.println("first loop "+line); 
for(String line: lines.subList(2, lines.size())) 
    System.out.println("second loop "+line); 
+1

大文件不可取! – 2011-05-06 11:28:23

+0

@唐,好點,但是鑑於文件至少有2行,它可能不是那麼大。我會考慮一個100 MB的文件很大,一個1 GB的文件很大。 – 2011-05-06 11:38:04

0

您可以在稍後想要返回的位置放置mark。 (假設你使用該文件不需要預讀緩衝區太大)。

0

我應該使用do while while而不是第二個while循環。 這樣它也會讀取第二行。

相關問題