Search code examples
javaiobufferedreader

Reading multiple files using BufferedReader


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?


Solution

  • 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.