如何两次或多次读取BufferedReader?

我有一个文本文件,每行一个整数 –

10 20 50 

我想阅读和打印这些数字两次甚至多次。 我尝试了一些代码而失败了。 如何更改代码以打印列表两次?

 import java.io.BufferedReader; import java.io.DataInputStream; import java.io.FileInputStream; import java.io.InputStreamReader; public class DoubleBuffer { public static void main(String[] args) { try { FileInputStream fstream = new FileInputStream("c:/files/numbers.txt"); BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); String strLine; // Read rows while ((strLine = br.readLine()) != null) { System.out.println(strLine); } // Read rows again while ((strLine = br.readLine()) != null) { System.out.println(strLine); } in.close(); } catch (Exception e) { System.err.println("Error: " + e.getMessage()); }//try-catch }// main }// class 

现在您可以多次打印。

 BufferedReader br = new BufferedReader(new FileReader( "D:/log_2071-04-31.txt" )); String strLine; ArrayList ans= new ArrayList(); // Read rows while ((strLine = br.readLine()) != null) { System.out.println(strLine); ans.add(strLine); } // Read again for (String result: ans) { System.out.println(result); } 

您可以使用mark()reset()或再次打开文件。 根据您的使用情况,您可能希望将数据存储在内存中?

参考 – http://docs.oracle.com/javase/6/docs/api/java/io/BufferedReader.html#reset%28%29

还有另一种可能性:将监听器连接到MultiReader

 interface Listener { void read(String line); } class MultiReader { final List listeners = new ArrayList(); public void addListener(Listener l) { this.listeners.add(l); } public void read(File file) throws IOException { final BufferedReader br = new BufferedReader(new FileReader(file)); try { String line; while ((line = br.readLine()) != null) { for (Listener l : this.listeners) { l.read(line); } } } finally { br.close(); } } } 

像这样使用:

 public class MultiBufferedReader { public static void main(String[] args) throws IOException { MultiReader mr = new MultiReader(); mr.addListener(new Listener() { @Override public void read(String line) { System.out.println("1: Got " + line); } }); mr.addListener(new Listener() { @Override public void read(String line) { System.out.println("2: Got " + line); } }); mr.read(new File("/etc/hosts")); } 

因此文件被读取一次,它可以处理大文件,因为文件的内容不在内存中。

  import java.io.BufferedReader; import java.io.DataInputStream; import java.io.FileInputStream; import java.io.InputStreamReader; public class DoubleBuffer { public static void main(String[] args) { try { FileInputStream fstream = new FileInputStream("c:/files/numbers.txt"); BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); String strLine; // Read rows while ((strLine = br.readLine()) != null) { System.out.println(strLine); } // return stream to top of file fstream.getChannel().position(0); br=new BufferedReader(new InputStreamReader(fstream)); // Read rows again while ((strLine = br.readLine()) != null) { System.out.println(strLine); } in.close(); } catch (Exception e) { System.err.println("Error: " + e.getMessage()); }//try-catch }// main }// class 

多次读取相同的内容将导致性能不佳…除非您有充分的理由进行多次读取,请在main方法的开头读取并将数据存储在适合您需求的数据结构中。