需要从list< path>

nzkunb0c  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(345)

我有一个路径列表,每个路径用文本行表示文件,即每个文件中有10行。我的任务是读取每个文件的第一行,然后是第二行、第三行,依此类推。
到目前为止,尝试使用bufferedreader执行此操作会导致它只读取第一行。

List<String> eachNLineFromEachFile = new ArrayList<>();

        for (int i = 0; i < 10; i++) {

            for (Path tempfile : tempFilesList) {
                BufferedReader tempfileReader = Files.newBufferedReader(tempfile);

                String line = null;
                line = tempfileReader.readLine();
                eachNLineFromEachFile.add(line);
                try (BufferedWriter outputwriter = Files.newBufferedWriter(outputFile)) {
                    outputwriter.write(String.valueOf(eachNLineFromEachFile));
                }

                System.out.println(eachNLineFromEachFile);

            }
        }

到目前为止,它的结果是读取每个文件的第一行,然后重复每个第一行。
怎样才能得到工作所需的补偿?i、 每次循环迭代从下一行开始读取。afaik我不应该使用randomaccessfile,它可能会使用getfilepointer和seek()方法来完成这个任务。
请提前帮助和感谢。

ikfrs5lh

ikfrs5lh1#

阅读您的代码,我会期望与您所描述的有问题的代码具有相同的行为。你只是在创造一个新的世界 BufferedReader 和一个新的 BufferedWriter 在每次迭代中,输出一个值。相反,您需要创建一个 BufferedReader 第一个循环的第一次迭代中的元素,并在第二个循环中重复读/写行:

BufferedWriter bf = Files.newBufferedWriter(outputFile);
 BufferedReader[] brs = new BufferedReader[10];
        for (int i = 0; i < 10; i++) {
            brs[i] = Files.newBufferedReader(tempFilesList.get(i));
        }
        for (int outerIndex = 0; outerIndex < 10; outerIndex++) {
            for (int innerIndex = 0; innerIndex < 10; innerIndex++) {
                String line = null;
                line = brs[innerIndex].readLine();
                bf.write(String.valueOf(line));
            }
        }
kqhtkvqz

kqhtkvqz2#

您可以将读取器添加到数组/列表中,并按如下所示或其中一个用户的建议进行循环-将内容复制到[][]或以键作为行号的Map中,然后执行任何您想发布的操作。。。

List<String> eachNLineFromEachFile = new ArrayList<>();
     //dummy for test.
     List<Path> tempFilesList = new ArrayList<>();
     List<BufferedReader> readers = new ArrayList<>();
     for (Path tempfile : tempFilesList) {
         BufferedReader tempfileReader = Files.newBufferedReader(tempfile);
         readers.add(tempfileReader);
     }
     boolean read_complete = false;
     while(true) {
         for (BufferedReader reader : readers) {
             String line = null;
             try {
                line = reader.readLine();
                if(line == null) {
                    read_complete = true;
                    break;
                }
                eachNLineFromEachFile.add(line);
                System.out.println(eachNLineFromEachFile);
             } catch (IOException e) {
                e.printStackTrace();
            }
         }
         if(read_complete) {
             break;
         }
     }

相关问题