我正在开发一个小程序,它要求我从文件中读取一组参数,在3个类中对它们执行一些if else操作(所有3个类都继承相同的父类)。在每次操作之后,该方法应该在输出文件中打印一行,如
方法1的输出1 方法2的输出1 方法1的输出2 方法1等的输出3
这个想法是所有3个类的所有方法都应该打印在同一个文件中,顺序并不重要。
我在每个方法的末尾使用了这个代码/ if block
if/method {
.... do something
text ="output of something";
try(PrintWriter out = new PrintWriter("outputfile.txt") ){
out.println(text);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}//end if/method
代码确实会向文件写入内容,但它总是会覆盖前一行。因此,不要使用例如12行"某些东西"我只有1。
我该如何解决这个问题?我怀疑它是因为我每次都会创建一个新的PrintWriter,并考虑在其他地方声明它并将其调用到每个类。那会有用吗?我怎么去打电话给每个班级?
这是我第一次使用文件。谢谢。
答案 0 :(得分:1)
您用于创建PrintWriter
的构造函数在内部使用FileOutputStream
的新实例。
FileOutputStream
有两个通用的写模型:
由于您未指定要使用的模式,因此您的编写器将使用默认模式。要告诉它您需要哪种模式,您需要使用正确的模式创建FileOutputStream
。例如,像这样:
try(PrintWriter out = new PrintWriter(new FileOutputStream("outputfile.txt", true))) {
// note the boolean parameter in FileOS constructor above. Its "true" value means "Append"
out.println(text);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
关于每个创建自己的PrintWriter
的类,还有一些要说的内容:
我建议不要每个类创建自己的输出工具,而应该从外部接收一个:
class MyClass {
public void outputTo(PrintWriter w) {
String text = ...
w.println(text);
}
}
and you use it like this:
try (FileOutputStream fos = new FileOutputStream("filename", append);
PrintWriter w = new PrintWriter(fos)) {
new MyClass().outputTo(w); // first instance
new MyClass().outputTo(w); // second instance
//... etc.
}
答案 1 :(得分:0)
尝试将PrintWriter声明为父类的静态变量,并根据需要在子类中使用它。