我想在Java中同时阅读几个文件。 我有5个文件,每个文件有50行(但我不能提前知道)。
我想读取每个文件的第1行,然后是每个文件的第2行等。
我该怎么做?
我有一个BufferedReader数组,如:
BufferedReader[] readers = new BufferedReader[x];
答案 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()