为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Java中逐行将两个文本文件数据写入第三个文件?

如何在Java中逐行将两个文本文件数据写入第三个文件?

慕码人2483693 2022-08-17 10:17:00
我从不同的路径读取两个文件,并且在读取时无法在循环中写入第二个文件内容,它迫使我在下面的程序中初始化rt变量。请帮助我如何修复它以获得预期的输出。提前致谢!!import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class ReadingFiles {    public static void main(String[] args) throws IOException     {        String inp = "location\\first.txt";        String two = "location\\second.txt";        BufferedReader br = new BufferedReader(new FileReader(inp));        BufferedReader br2 = new BufferedReader(new FileReader(two));        String st,rt;        BufferedWriter bw = new BufferedWriter(new FileWriter("location"));        while((st=br.readLine())!= null || (rt=br2.readLine())!= null )        {            bw.write(st);            bw.newLine();            /*bw.write(rt);            bw.newLine();            System.out.println(rt);*/            //instance variable rt of type String is forcing me to initialize like             //for local variable and throwing nullpointer exception instead of fetching            //second file contents        }        bw.close();    }}请在上面找到我的程序,我正在尝试将两个文本文件内容写入第三个文件。以及下面给出的示例输入和输出inputin file-1   a1a1a1               b2b2b2            c3c3c3in file-2   d1d1d1            e2e2e2            f3f3f3 output   a1a1a1  d1d1d1  b2b2b2  e2e2e2  c3c3c3  f3f3f3
查看完整描述

3 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

您在代码中犯了几个错误,并且还有更好的方法来实现代码。但是对于您的轻描淡写,我将更新您现有的代码。


1) st 和 rt 应初始化。因为当第一次 st 初始化时,rt 尚未初始化。


2) ||应该是 &&.因为您需要循环直到所有文件都读完为止。


3)应该检查st&rt是否为空。


请检查以下代码。


public class ReadingFiles 

{


public static void main(String[] args) throws IOException 

{

    String inp = "first.txt";

    String two = "second.txt";

    BufferedReader br = new BufferedReader(new FileReader(inp));

    BufferedReader br2 = new BufferedReader(new FileReader(two));


    String st,rt="";

    BufferedWriter bw = new BufferedWriter(new FileWriter("location"));

    boolean isCompleted = false;

    while( !isCompleted)

    {

        st=br.readLine() ;

        bw.write(st==null?"":st);

        bw.newLine();

        rt=br2.readLine();

        bw.write(rt==null?"":rt);

        bw.newLine();


        isCompleted = (st==null && rt == null) ? true : false ;


    }

    bw.close();

}

}


查看完整回答
反对 回复 2022-08-17
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

你没有关闭你的读者,我更喜欢过度明确的关闭。然后,在无限循环中读取各自文件中的每一行。在写入输出缓冲区之前,从每个文件单独测试 ,并在用尽两个输入后再次终止循环。像这样,try-with-resourcesnull


try (BufferedReader br = new BufferedReader(new FileReader(inp));

        BufferedReader br2 = new BufferedReader(new FileReader(two));

        BufferedWriter bw = new BufferedWriter(new FileWriter("location"))) {

    while (true) {

        String st = br.readLine();

        if (st != null) {

            bw.write(st);

            bw.newLine();

        }

        String rt = br2.readLine();

        if (rt != null) {

            bw.write(rt);

            bw.newLine();

        }

        if (st == null && rt == null) {

            break;

        }

    }

} catch (IOException e) {

    e.printStackTrace();

}


查看完整回答
反对 回复 2022-08-17
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

我会使用无限循环而不是在我的循环内单独管理循环退出条件。dowhilewhileif

为什么?因为标头中的第二个条件语句可能不会执行,因为它是 or (),并且当第一个语句是时,编译器会忽略条件语句的其余部分,因此永远不会启动。这就是为什么编译器强制您初始化的原因。while||truertrt


查看完整回答
反对 回复 2022-08-17
  • 3 回答
  • 0 关注
  • 75 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号