Как прочитать 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
5 ответов:
Теперь вы можете печатать несколько раз.
BufferedReader br = new BufferedReader(new FileReader( "D:/log_2071-04-31.txt" )); String strLine; ArrayList<String> ans= new ArrayList<String>(); // 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<Listener> listeners = new ArrayList<Listener>(); 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