【问题标题】:Write multiple lines in a text file ( java)在文本文件中写入多行(java)
【发布时间】:2014-03-15 19:48:41
【问题描述】:

以下代码用于在cmd 中运行一个命令,并生成一个带有命令行输出的文本文件。下面的代码在 Eclipse 的输出窗口中显示了正确的信息,但文本文件中只打印了最后一行。谁能帮我解决这个问题?

import java.io.*;

public class TextFile {
public static void main(String[] args) throws IOException {
    try {
        Process p = Runtime.getRuntime().exec("git log");

        BufferedReader in = new BufferedReader(
                new InputStreamReader(p.getInputStream()));
        BufferedWriter writer = null;

        String line = null;
        while ((line = in.readLine()) != null) {

            writer = new BufferedWriter(new FileWriter("textfile.txt"));
            writer.write(line);
            System.out.println(line);

            writer.close();
        }

    } catch (IOException e) {
        e.printStackTrace();

    }

   }
}

【问题讨论】:

  • 通过在每次迭代中创建一个 FileWriter,文件被覆盖。在循环外声明 Writers 并在循环后关闭它。 (顺便说一句;你的代码很难阅读,下次请遵守一些一致的缩进,这样更容易发现此类错误。)
  • 请注意现在应该使用java的新IO库,称为NIO。核心类是PathsPathFiles。例如,您可以使用Paths.get("filename") 查找文件或使用Files.write(pathToFile, stuffToWrite, options) 写入文件。

标签: java


【解决方案1】:

如其他答案所述,问题是您在 while 循环中创建 BufferedWriter 实例,这就是为什么只有最后一行被打印到文件中。

使用try-with-resources 编写此程序的更好方法之一-

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;

public class TextFile {

    public static void main(String[] args) throws IOException {
        try {
            Process p = Runtime.getRuntime().exec("git log");

            try (BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
                    BufferedWriter writer = new BufferedWriter(new FileWriter("textfile.txt"))) {

                String line = null;
                while ((line = in.readLine()) != null) {
                    writer.write(line);
                    writer.newLine();
                    System.out.println(line);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();

        }
    }
}

【讨论】:

    【解决方案2】:

    问题是您在循环中创建了一个新的 BufferedWriter。其次,您还关闭了循环内的编写器。最后,您的代码块有点混乱 - 如果您重新格式化您的代码(在 Eclipse 中使用 Ctrl-F 自动执行),您代码中的块会更加清晰。

    您的代码应如下所示,在 try/catch 块的 try 部分内:

        BufferedWriter writer = (new FileWriter ("textfile.txt"));
    
        String line =null;
        while ((line= in.readLine()) !=null) {
            writer.write(line);
            System.out.println(line);
        }
        writer.close();
    

    【讨论】:

      猜你喜欢
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-12
      • 1970-01-01
      • 2012-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多