Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.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中迭代.txt文件?_Java_Csv_Intellij Idea_Bufferedreader - Fatal编程技术网

有没有一种方法可以读取一行和下一行,在Java中迭代.txt文件?

有没有一种方法可以读取一行和下一行,在Java中迭代.txt文件?,java,csv,intellij-idea,bufferedreader,Java,Csv,Intellij Idea,Bufferedreader,我想使用BufferReader读取一行.txt文件。但我的问题是,我需要同时阅读一行和下一行,然后转到下一行,用下一行再做一次。以下是一个例子: A B C D 我需要读A和B(和过程),然后是B和C(过程),然后是C和D 我是否需要创建一个数组来存储每对数据,然后进行处理?或者我可以在迭代文件时进行处理吗?我目前正在这样做: while(file=in.readLine()!=null){ String[]data=file.split(“,”); 字符串源=数据[0]; file=in.

我想使用BufferReader读取一行.txt文件。但我的问题是,我需要同时阅读一行和下一行,然后转到下一行,用下一行再做一次。以下是一个例子:

A
B
C
D
我需要读A和B(和过程),然后是B和C(过程),然后是C和D

我是否需要创建一个数组来存储每对数据,然后进行处理?或者我可以在迭代文件时进行处理吗?我目前正在这样做:

while(file=in.readLine()!=null){
String[]data=file.split(“,”);
字符串源=数据[0];
file=in.readLine();
字符串目的地=数据[0];
}
这里的目标是将上一个目的地作为下一个源。 但是当我的while循环转到下一行时,我不是跳过了一个字母吗


谢谢你的关注

您可以尝试以下方法:

        String a = in.readLine();
        if (a == null) {
            return;
        }
       
        for (String b; (b = in.readLine()) != null; a = b) {
            // do smth
            
        }
也许流管道的reduce操作对您也有帮助。例如,如果要将所有行合并在一起:

   Optional<String> reduce = in.lines().reduce("", (a,b) -> a+b);
   if (reduce.isPresent()) {
     // ..
   } else {
     // ...
   }
Optional reduce=in.lines().reduce(“,(a,b)->a+b);
if(reduce.isPresent()){
// ..
}否则{
// ...
}

我将使用两元素
字符串
数组作为“缓冲区”

String[]buffer=新字符串[2];
try(FileReader fr=newfilereader(“文件路径”);
BufferedReader br=新的BufferedReader(fr)){
String line=br.readLine();
while(行!=null){
if(缓冲区[0]==null){
缓冲区[0]=行;
}
else if(缓冲区[1]==null){
缓冲区[1]=行;
}
否则{
//对“缓冲区”的内容执行任何操作
缓冲区[0]=缓冲区[1];
缓冲区[1]=行;
}
line=br.readLine();
}
//对“缓冲区”的内容执行任何操作
}
捕获(IOXIO异常){
xIo.printStackTrace();
}

退出
while
循环时,您尚未处理文件的最后两行,因此您需要在退出循环后最后执行一次处理。

。阅读A和B之后,您不需要再次阅读B。你已经有了!谢谢你的回答!我编辑了一点我的消息,因为它不是完全清楚,对不起!为什么不使用调试器逐步检查代码,看看它在做什么?谢谢您的回答!使用字符串[]可能会很好,特别是因为我正在使用csv文件。但是我需要同时处理多个文件,并且必须手动计算最后一行不是很方便。谢谢你的回答!我正在处理csv文件,所以我不认为我可以连接所有这些文件,这将使其无法读取。不过,使用for循环看起来不错。我不知道我们可以把a=b作为下一步。你可以用while循环代替for循环。我的流中的concatation只是一个例子,你可以使用任何二进制函数。我不知道你到底想用这两行做什么,但是你可以试着用reduce。我正在创建一个图表,我把第一行作为源,下一行作为目标。我需要检查每对线是否都是我的图形所需的连接(检查csv文件的另一列),因为在我的图形中必须避免某些线对。如果有点模糊,我很抱歉,但我不希望人们完全解决我的问题,所以我什么都不做。