1

コードを書き直して、まったく同じことを行うクラス内のメソッドの数を減らしたいのですが、ファイルまたはコンソールに書き込むことで、次のようなことができます。

PrintFlightSchedule(String aFileName); // prints to a file
PrintFlightSchedule(); // writes to console.

達成しようとしていることを実証するために、抽象 OutputStream を定義し、それを PrintStream またはコンソール (System.out 経由) としてインスタンス化することによって、次のテスト メソッドを作成しようとしました。

public static void testOutputStream(String fileNm, String msg) {
    OutputStream os;
    if (fileNm.equals("") ) { // No file name provided, write to console
        os = System.out;
    }
    // File name provided, write to this file name
    else {
        try {
            os = new FileOutputStream(fileNm);
        }
        catch (FileNotFoundException fe) {
            System.out.println("File not found " + fe.toString());
        }
    }
    // Use the output stream here - ideally println method?
    // os.println or write(6);
}

これは確かに中途半端ですが、私が何を達成したいのかがわかります。

Javaで実行時に出力メソッド(ファイルまたはコンソール)を定義する方法はありますか?実行時に同じメソッドを使用して実行できますか? FileOutputStream をコンソールにリダイレクトするのが簡単な方法だと思います-それは可能ですか?

4

4 に答える 4

1

文字列の代わりに FileDescriptor を使用して FileOutputStream を作成できます。

public FileOutputStream(FileDescriptor fdObj)

指定されたファイル記述子に書き込むファイル出力ストリームを作成します。これは、ファイル システム内の実際のファイルへの既存の接続を表します。

まず、セキュリティ マネージャがある場合、その checkWrite メソッドがファイル記述子 fdObj 引数を引数として呼び出されます。

fdObj が null の場合、NullPointerException がスローされます。

fdObj が無効な場合、このコンストラクターは例外をスローしません。ただし、結果のストリームでメソッドが呼び出され、ストリームで I/O が試行されると、IOException がスローされます。

デフォルトの FileDescriptors は次のとおりです。

static FileDescriptor   err
A handle to the standard error stream.

static FileDescriptor   in
A handle to the standard input stream.

static FileDescriptor   out
A handle to the standard output stream.

したがって、同等のものは次のようになります。

public static void testOutputStream(String fileNm, String msg) {
    FileOutputStream os;
    if (fileNm.equals("") ) { // No file name provided, write to console
        os = new FileOutputStream(FileDescriptor.out);
    }
    // File name provided, write to this file name
    else {
        try {
            os = new FileOutputStream(fileNm);
        }
        catch (FileNotFoundException fe) {
            System.out.println("File not found " + fe.toString());
        }
    }
    // Use the output stream here - ideally println method?
    // os.println or write(6);
}
于 2015-11-06T19:32:15.220 に答える