需要从列表中的<Path>每个文件中读取每个 N 行



我有路径列表,每个路径用文本行表示文件,即每个文件中有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);
}
}

到目前为止,它的结果是读取每个文件的每一行,然后重复每一行。

如何获得所需的补偿?即每次循环迭代从下一行开始读取。AFAIK我不应该使用RandomAccessFile,它可能会用它的getFilePointer和seek((方法来完成任务(。

请提前提供帮助并表示感谢。

您可以将读卡器添加到数组/列表中,并按照如下所示或其中一个用户的建议进行循环-将内容复制到[][]或以键为行号的映射中,然后随心所欲地发布。。。

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;
}
}

阅读您的代码时,我会发现与您所描述的有问题的行为完全相同的行为。您只是在每次迭代中创建一个新的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));
}
}

最新更新