Java 同时读取多个文件
我想用Java同时读取几个文件。 例如,我有5个文件,每个文件有50行(但我不能事先知道) 我想读每个文件上的行号1,然后是每个文件上的行号2等等 我怎么做 我有一个BufferedReader数组,如:Java 同时读取多个文件,java,file-io,bufferedreader,filereader,Java,File Io,Bufferedreader,Filereader,我想用Java同时读取几个文件。 例如,我有5个文件,每个文件有50行(但我不能事先知道) 我想读每个文件上的行号1,然后是每个文件上的行号2等等 我怎么做 我有一个BufferedReader数组,如: BufferedReader[] readers = new BufferedReader[x]; 当您从读者那里获得新行时,您可以使用循环进行迭代。 在循环内部,添加一个嵌套的循环来迭代读卡器。通过这种方式,您可以读取与每个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);
}
}
}
当您从读者那里获得新行时,您可以使用循环进行迭代。
在循环内部,添加一个嵌套的循环来迭代读卡器。通过这种方式,您可以读取与每个
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);
}
}
}
如果我理解正确,您已经设置了一个数组,每个需要读取的文件都有一个缓冲读取器。如果要读取每个文件的第一行、第二行等,需要在到达最长文件的最后一行时停止 您可以通过查找每个文件中的行数并保存最大值来获得此值。可能有用 然后,为循环编写一个
:
for (int i = 0; i < longestFileLength; i++) {
String fileLine1 = readers[1].readLine();
String fileLine2 = readers[2].readLine();
//...
String fileLine99 = readers[99].readLine();
}
for(int i=0;i
如果我理解正确,您已经设置了一个数组,每个需要读取的文件都有一个缓冲读取器。如果要读取每个文件的第一行、第二行等,需要在到达最长文件的最后一行时停止
您可以通过查找每个文件中的行数并保存最大值来获得此值。可能有用
然后,为
循环编写一个:
for (int i = 0; i < longestFileLength; i++) {
String fileLine1 = readers[1].readLine();
String fileLine2 = readers[2].readLine();
//...
String fileLine99 = readers[99].readLine();
}
for(int i=0;i
我会使用ArrayList而不是数组
ArrayList<BufferedReader> readers = new ArrayList<>();
...
while(!readers.isEmpty()) {
for(BufferedReader reader: readers) {
String line = reader.readLine();
if(line == null) {
readers.remove(reader);
} else {
...
}
}
}
ArrayList readers=new ArrayList();
...
而(!readers.isEmpty()){
for(BufferedReader读卡器:读卡器){
字符串行=reader.readLine();
如果(行==null){
读卡器。删除(读卡器);
}否则{
...
}
}
}
我会使用ArrayList而不是数组
ArrayList<BufferedReader> readers = new ArrayList<>();
...
while(!readers.isEmpty()) {
for(BufferedReader reader: readers) {
String line = reader.readLine();
if(line == null) {
readers.remove(reader);
} else {
...
}
}
}
ArrayList readers=new ArrayList();
...
而(!readers.isEmpty()){
for(BufferedReader读卡器:读卡器){
字符串行=reader.readLine();
如果(行==null){
读卡器。删除(读卡器);
}否则{
...
}
}
}
您可以使用流:
while(Arrays.stream(readers).filter(br -> br.ready()).count()>0)
Arrays.stream(readers).map(br -> br.readLine()).toArray()
您可以使用流:
while(Arrays.stream(readers).filter(br -> br.ready()).count()>0)
Arrays.stream(readers).map(br -> br.readLine()).toArray()
您可以使用5个线程。但是如果你这样做是为了加快速度,那么所有5个文件都应该在不同的驱动器上,否则它可能会变慢而不是变快。我不想使用线程。。使用for和while循环不可能做到这一点吗?为什么需要同时读取它们?您需要以多快的速度读取它们?用负责每个文件的读取器填充数组,然后迭代它们并使它们读取一行。重复操作,直到没有更多的行可读。@SpiderPig,我需要在同一行连接每个文件的信息。速度不重要。您可以使用5个线程。但是如果你这样做是为了加快速度,那么所有5个文件都应该在不同的驱动器上,否则它可能会变慢而不是变快。我不想使用线程。。使用for和while循环不可能做到这一点吗?为什么需要同时读取它们?您需要以多快的速度读取它们?用负责每个文件的读取器填充数组,然后迭代它们并使它们读取一行。重复操作,直到没有更多的行可读。@SpiderPig,我需要在同一行连接每个文件的信息。速度并不重要。但是如果我不知道线路的数量,我怎么知道什么时候停车呢?(在您的示例中为10)检查readLine()
之后的line
值。我更新了密码。是的,没问题。我要试试这个!但是如果我不知道行数,我怎么知道何时停止?(在您的示例中为10)检查readLine()
之后的line
值。我更新了密码。是的,没问题。我要试试这个!是的,这个解决方案看起来不错。我要试试看!若使用增强的for循环对集合进行迭代,则不应修改该集合。改用迭代器#remove
。是的,这个解决方案看起来不错。我要试试看!若使用增强的for循环对集合进行迭代,则不应修改该集合。改用迭代器#remove
。