同时阅读多个文件Java
问题描述:
我想在Java中同时阅读多个文件。 我有例如5个文件,每个文件有50行(但我不能提前知道它)。同时阅读多个文件Java
我想读的每个文件的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);
}
}
}
答
如果我理解正确的话,你有一个阵列设置,为每个需要读取文件中的一个缓冲的读者。如果要读取每个文件的第一行,每个文件的第二行等,则需要在到达最长文件的最后一行时停止。
您可以通过查找每个文件中的行数并保存最大值来获取此值。 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()
你可以使用5个线程。但是如果你这样做是为了加快速度,所有5个文件应该放在不同的驱动器上,否则它可能会变得更慢而不是更快。 – SpiderPig
我不想使用线程..是不是可以用for和while循环做到这一点? – iAmoric
为什么你需要同时阅读它们?你需要多快读取它们? – SpiderPig