Reputation: 471
I want to read texts from two or more files using a single BufferedReader object.
This is how I did it in my code.
Charset charset = Charset.forName("UTF-8");
Path p1 = Paths.get("sum1.csv");
List<String> list = new ArrayList<String>();
BufferedReader reader = Files.newBufferedReader(p1, charset);
try {
String line;
while((line = reader.readLine()) != null && !line.isEmpty()){
list.add(line);
}
} catch (IOException e) {
System.err.format("IOException: %s%n", e);
reader.close();
}
Path p2 = Paths.get("sum2.csv");
reader = Files.newBufferedReader(p2, charset);
try {
String line;
while((line = reader.readLine()) != null && !line.isEmpty()){
list.add(line);
}
} catch (IOException e) {
System.err.format("IOException: %s%n", e);
reader.close();
}
The code compiled and run correctly.
What is the standard way to deal with this problem? Is it possible to read two or more files using a single BufferedReader?
Upvotes: 7
Views: 10583
Reputation: 298153
Charset charset = Charset.forName("UTF-8");
List<String> list = new ArrayList<String>();
try(
FileInputStream is1=new FileInputStream("sum1.csv");
FileInputStream is2=new FileInputStream("sum2.csv");
SequenceInputStream is=new SequenceInputStream(is1, is2);
BufferedReader reader=new BufferedReader(new InputStreamReader(is, charset));)
{
try {
String line;
while((line = reader.readLine()) != null && !line.isEmpty()){
list.add(line);
}
} catch (IOException e) {
System.err.format("IOException: %s%n", e);
}
}
By the way, did you mean
String line;
while((line = reader.readLine()) != null)
if(!line.isEmpty()) list.add(line);
for your inner loop? Your code stops at the first empty line, my suggested alternative skips empty lines. But I can only guess your real intention.
Upvotes: 6
Reputation: 79838
In the code above, you did create a new BufferedReader to read from the second file. What you've done is perfectly fine, although it would make sense to put the repeated code into a method that takes the filename and the list of strings as arguments.
You've got one little glitch - if there's an empty line in the middle of either of your files, your program stops reading when it gets to it. I'm not sure if that's actually what you want.
Upvotes: 1