Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 同时读取多个文件_Java_File Io_Bufferedreader_Filereader - Fatal编程技术网

Java 同时读取多个文件

Java 同时读取多个文件,java,file-io,bufferedreader,filereader,Java,File Io,Bufferedreader,Filereader,我想用Java同时读取几个文件。 例如,我有5个文件,每个文件有50行(但我不能事先知道) 我想读每个文件上的行号1,然后是每个文件上的行号2等等 我怎么做 我有一个BufferedReader数组,如: BufferedReader[] readers = new BufferedReader[x]; 当您从读者那里获得新行时,您可以使用循环进行迭代。 在循环内部,添加一个嵌套的循环来迭代读卡器。通过这种方式,您可以读取与每个BufferedReader的相同行号相匹配的行 以下是想法:

我想用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);
       }
    }

}

当您从读者那里获得新行时,您可以使用循环进行迭代。
在循环内部,添加一个嵌套的循环来迭代读卡器。通过这种方式,您可以读取与每个
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