Java:将文本打印到Console或Text文件的优雅方式

sti*_*ghy 3 java

我有一个打印出一些文本输出的Java程序.实际上我的简单PrintOutput功能就像

System.out.println("some output");
Run Code Online (Sandbox Code Playgroud)

但我想声明一个变量

printonfile = true
Run Code Online (Sandbox Code Playgroud)

如果设置为true,则将输出打印到文本文件;如果设置为false,则输出到屏幕(控制台).

我如何将out分配给文件而不是System.out,以避免产生类似的东西

 if (printonfile) {
   myfile.out("some output");
 }
 else {
   System.out.println("some output");
 }
Run Code Online (Sandbox Code Playgroud)

有没有办法在我的函数开头声明一个"输出"变量,所以我可以为它分配标准输出(控制台)或文本文件?

谢谢

Rom*_*man 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");
Run Code Online (Sandbox Code Playgroud)