当我尝试将两个(.txt)文件合并到另一个(.txt)文件中时,为什么我的代码不起作用?

时间:2017-08-28 18:45:57

标签: java bufferedreader printwriter

我有两个.txt文件(file1.txt和file2.txt)。在这些文件中有一些字符行。我的目的是将这两个文件的内容合并到另一个文件(file3.txt)中。我的代码如下:

    public static void main(String[] args) {

    try {
        PrintWriter pw = new PrintWriter("file3.txt");
        BufferedReader br1 = new BufferedReader(new FileReader("file1.txt"));
        BufferedReader br2 = new BufferedReader(new FileReader("file2.txt"));


        String line = br1.readLine();
        while(line!=null){
            pw.println(line);
            br1.readLine();
        }

        line = br2.readLine();
        while (line!=null) {
            pw.println(line);
            br2.readLine();

        }

        pw.flush();
        pw.close();

        br1.close();
        br2.close();

    } catch (FileNotFoundException ex) {
        Logger.getLogger(JavaIoProject.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(JavaIoProject.class.getName()).log(Level.SEVERE, null, ex);
    }     
}

编译时没有错误。运行后,当我尝试查看(file3.txt)内的预期输出时,它没有显示任何内容,鼠标指针变为处理。为什么会这样。哪些是我忘记添加的缺失部分或者我应该编辑哪部分以及为什么..需要你的帮助..谢谢。

3 个答案:

答案 0 :(得分:2)

您错过了重新分配循环中行的值,因此您获得了无限循环。

同时更改两个循环:

 while (line!=null) {
        pw.println(line);
        line =br2.readLine();

    }

答案 1 :(得分:1)

你错过了作业。所以你可以尝试这样的事情。

 String line ="";
 while((line=br1.readLine())!=null){
      pw.println(line);
 }

 line = "";
 while ((line=br2.readLine())!=null) {
     pw.println(line);
 }

答案 2 :(得分:1)

  

您在实施中多次重复的代码很多。您可以   只需创建一个方法并按文件名调用它。

    PrintWriter pw = new PrintWriter("file3.txt");
    readAndWrite(pw, "file1.txt");
    readAndWrite(pw, "file2.txt");

    pw.flush();
    pw.close();

这是readAndWrite方法的定义。也纠正循环。

private static void readAndWrite(PrintWriter pw, String filename) throws FileNotFoundException, IOException {
    BufferedReader br = new BufferedReader(new FileReader(filename));
    String line = br.readLine();
    while (line!=null) {
        pw.println(line);
        line =br.readLine();    
    }
    br.close();
}