同时读取多个文件Java

Read several files at the same time Java

我想在 Java 中同时读取多个文件。 例如,我有 5 个文件,每个文件有 50 行(但我无法提前知道)。

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

我该怎么做?

我有一个像这样的 BufferedReader 数组:

BufferedReader[] readers = new BufferedReader[x]; 

当你从读者那里得到一个新的行时,你可以使用一个循环来迭代。
在循环内,添加一个嵌套循环以遍历读者。这样就可以读到每个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);
       }
    }

}

如果我没理解错的话,你已经设置了一个数组,其中一个缓冲 reader 用于你需要读取的每个文件。如果要读取每个文件的第一行,每个文件的第二行等,则需要在到达最长文件的最后一行时停止。

您可以通过查找每个文件中的行数并保存最大值来获得此值。 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();
}

我会使用 ArrayList 而不是数组。

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

您可以使用流:

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