同时读取多个文件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()
我想在 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()