【发布时间】:2017-08-09 11:47:41
【问题描述】:
我正在开发一个小程序,该程序需要我从文件中读取一组参数,在 3 个类中对它们执行一些 if else 操作(所有 3 个类都继承同一个父类)。在每个操作之后,该方法应该像这样在输出文件中打印一行
方法1的输出1 方法2的输出1 方法1的输出2 方法1的输出3等
想法是所有3个类的所有方法都应该打印在同一个文件中,顺序并不重要。
我在每个方法/if块的末尾都使用了这段代码
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
代码确实向文件写入了一些内容,但它总是覆盖前一行。因此,例如,我只有 1 行,而不是 12 行“某事”。
我该如何解决这个问题?我怀疑这是因为我每次都制作一个新的 PrintWriter 并且考虑过在其他地方声明它并将它调用到每个班级。那行得通吗?我将如何将它调用到每个班级?
这是我第一次处理文件。谢谢。
【问题讨论】:
-
是的,问题是您在所有三个类中都创建了一个新的 PrintWriter。而不是这样做,您必须将其作为参数传递。例如:编写处理方法以接受 PrintWriter 作为参数,然后在 main 方法中创建单个 PrintWriter 实例,然后将三个方法调用放在其 try 块中。
-
@BalázsNemes,如果写操作不是并发的并且没有及时分离(即每个类都可以写,而不管其他三个类在做什么),那么为每个类创建自己的打印写入器实际上是可以的。跨度>
-
@M.Prokhorov 好的.. 那么如何避免覆盖?
标签: java file printwriter