【发布时间】: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。核心类是Paths、Path和Files。例如,您可以使用Paths.get("filename")查找文件或使用Files.write(pathToFile, stuffToWrite, options)写入文件。
标签: java