2011-09-11 20 views
3

私はいくつかのテキスト出力を印刷するJavaプログラムを持っています。実は私の簡単なPrintOutputと機能がJava:コンソールやテキストファイルにテキストを印刷するためのエレガントな方法

System.out.println("some output"); 

ようなものですが、私はtrueに、または画面(コンソール)にsetted場合は、テキストファイルへの私の出力を印刷するために、変数

printonfile = true 

を宣言したい場合falseに設定されます。

は、どのように私は私の機能ので、私ができるの冒頭に「出力」変数を宣言する方法はあります代わりにSystem.outは

if (printonfile) { 
    myfile.out("some output"); 
} 
else { 
    System.out.println("some output"); 
} 

のようなものを作るために回避するファイルへのアウトを割り当てることができます標準出力(コンソール)またはテキストファイルを割り当てますか?

おかげ

+5

ロギングフレームワークを見たことがありますか? – home

答えて

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(); 
3

あなたはこのような何かを行うことができます:あなたは何も変更せずに好きな場所

PrintSream stream = printToFile ? 
         new PrintStream(new File(filename)) 
         : System.out; 

は今、あなたは、ストリームを使用することができます。

0

正しく設定するには少し時間がかかりますが、log4jは、警告、エラー、一般的なメッセージのより良い/カスタムのロギングが必要な場合には、ぜひ試してみる価値があります。

10

Strategyデザインパターンの一般的な使用例について説明しました。

インターフェイスPrinterを作成し、2つの実装をConsolePrinterFilePrinterにして、状況に応じて正しいものを使用してください。

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"); 
+0

最もエレガントな、ローマ人。 –

関連する問題