我有一个打印出一些文本输出的Java程序。实际上我的简单PrintOutput函数就像
System.out.println("some output");
但我想声明一个变量
printonfile = true
如果设置为true,则将输出打印到文本文件,如果设置为false,则输出到屏幕(控制台)。
如何将out分配给文件而不是System.out,以避免产生类似
的内容 if (printonfile) {
myfile.out("some output");
}
else {
System.out.println("some output");
}
有没有办法在我的函数开头声明一个“输出”变量,所以我可以为它分配标准输出(控制台)或文本文件?
由于
答案 0 :(得分:10)
您已经描述了策略设计模式的典型用例。
创建一个界面Printer
,制作2个实现ConsolePrinter
和FilePrinter
,并根据您的情况使用正确的实现。
interface Printer {
void print(String msg);
}
class ConsolePrinter implements Printer {
public void print(String msg) {
System.out.print(msg);
}
}
class FilePrinter implements Printer {
private final FileWriter fileWriter;
public FilePrinter(File file) {
this.fileWriter = new FileWriter(file); //here you should do some exceptions handling
}
public void print(String msg) {
fileWriter.write(msg); //here you should also care about exceptions
fileWriter.flush();
}
}
Printer chosenPrinter = printOnFile ? new FilePrinter(file) : new ConsolePrinter();
chosenPrinter.print("Hello");
答案 1 :(得分:3)
您可以这样做:
PrintSream stream = printToFile ?
new PrintStream(new File(filename))
: System.out;
现在,您可以在任何地方使用流而无需任何更改。
答案 2 :(得分:3)
查看logging library例如log4j或java.util.logging可以非常详细地控制输出。
答案 3 :(得分:2)
System类的out
字段是PrintStream
类的实例;您还可以构造一个输出到文件的PrintStream对象。因此,您设置输出位置的想法可以如下工作
PrintStream myOut = null;
// Decide output method somehow
if(...) {
myOut = System.out;
}
else {
myOut = new PrintStream(new File("/path/to/a/file"));
}
// Use the PrintStream to write a message
myOut.println("Hello World");
// Tidy up at end
myOut.close();
答案 4 :(得分:0)
如果时间正确设置需要一点时间,但如果你想要更好地/自定义记录你的警告,错误和一般信息,log4j绝对值得一试。