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

时间:2019-03-17 18:27:18

标签: java file

我从不同的路径读取了两个文件,而在while循环中无法读取第二个文件的内容时,这迫使我初始化以下程序中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();
    }

}

请在上面找到我的程序,我正在尝试写入两个文本文件内容 进入第三档。以及下面给出的示例输入和输出

input
in file-1   a1a1a1   
            b2b2b2
            c3c3c3

in file-2   d1d1d1
            e2e2e2
            f3f3f3

 output 

  a1a1a1
  d1d1d1
  b2b2b2
  e2e2e2
  c3c3c3
  f3f3f3

3 个答案:

答案 0 :(得分:0)

我将使用无限do while循环而不是while来执行此操作,并在循环内部的单独if中管理循环退出条件。

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

答案 1 :(得分:0)

您并没有关闭读者,与显式关闭相比,我更喜欢try-with-resources。然后,无限循环地从各自文件中读取每一行。在写入输出缓冲区之前,分别测试每个文件中的null,然后在耗尽两个输入之后再次结束测试以终止循环。像

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

答案 2 :(得分:0)

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

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

}