同时读取几个Java文件

时间:2017-04-14 19:59:48

标签: java file-io bufferedreader filereader

我想在Java中同时阅读几个文件。 我有5个文件,每个文件有50行(但我不能提前知道)。

我想读取每个文件的第1行,然后是每个文件的第2行等。

我该怎么做?

我有一个BufferedReader数组,如:

BufferedReader[] readers = new BufferedReader[x]; 

4 个答案:

答案 0 :(得分:3)

当您从读者那里获得新行时,您可以使用循环进行迭代 在循环内部,添加一个嵌套循环来迭代读者。通过这种方式,您可以读取与每个BufferedReader的相同行号匹配的行。

这是一个想法:

BufferedReader[] readers = new BufferedReader[5]; 
readers[0] = new BufferedReader(new FileReader("...));
...
readers[4] = new BufferedReader(new FileReader("...));


boolean noMoreLine = false;
while (!noMoreLine)       

   for (BufferedReader reader : readers){
        String line = reader.readLine();
        if (line == null){
           noMoreLine = true;
           System.out.println("no more line");
           break;
        }
        System.out.println("Line " + i + " = line);
       }
    }

}

答案 1 :(得分:1)

如果我理解正确,您需要设置一个阵列,每个文件需要一个缓冲读取器。如果你想读取每个文件的第一行,每个文件的第二行等,你需要在你到达最长文件的最后一行时停止。

您可以通过查找每个文件中的行数并保存最大值来获取此值。 Number of lines in a file in Java可能有用。

然后,写一个for循环:

for (int i = 0; i < longestFileLength; i++) {
    String fileLine1 = readers[1].readLine();
    String fileLine2 = readers[2].readLine();
    //...
    String fileLine99 = readers[99].readLine();
}

答案 2 :(得分:1)

我使用的是ArrayList而不是数组。

ArrayList<BufferedReader> readers = new ArrayList<>();
...
while(!readers.isEmpty()) {
  for(BufferedReader reader: readers) {
    String line = reader.readLine();
    if(line == null) {
      readers.remove(reader);
    } else {
      ...
    }
  }
}

答案 3 :(得分:1)

您可以使用流:

while(Arrays.stream(readers).filter(br -> br.ready()).count()>0)
    Arrays.stream(readers).map(br -> br.readLine()).toArray()