使用BufferedReader读取多个文件

时间:2014-02-10 17:31:46

标签: java io bufferedreader

我想使用一个BufferedReader对象从两个或多个文件中读取文本。

这就是我在代码中的做法。

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();
}

代码已编译并正确运行。

处理此问题的标准方法是什么?是否可以使用单个BufferedReader读取两个或更多文件?

2 个答案:

答案 0 :(得分:4)

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);
  }
}

顺便说一下,你的意思是

String line;
while((line = reader.readLine()) != null)
  if(!line.isEmpty()) list.add(line);

你的内循环?你的代码在第一个空行停止,我建议的替代方法会跳过空行。但我只能猜出你的真实意图。

答案 1 :(得分:1)

在上面的代码中, 创建了一个新的BufferedReader以从第二个文件中读取。您所做的完全没问题,尽管将重复的代码放入一个将文件名和字符串列表作为参数的方法是有意义的。

你有一个小故障 - 如果你的任何一个文件中间有一个空行,你的程序到达时会停止读取。我不确定这是不是你想要的。