使用重定向输入启动一个类

时间:2013-04-21 10:22:28

标签: java multithreading redirect process stdout

我需要重新格式化Java应用程序的命令行日志记录,而无需触及原始应用程序。我有所有代码,所以我已导入到我的项目中。我想要做的是找出一种方法来创建一个新的Process()或Thread(),并将STDOUT和STDIN从该Thread重定向到BufferedReader和BufferedWriter。

我想创建一个启动新进程(MyApp.Main(args))的包装器。我只是不知道该怎么做,因为它在罐子里。 ProcessBuilder想要一个文件启动。有什么办法可以从Thread中隔离System.In和System.Out吗?

我认为找出一种启动线程并从中获取System.Out / System.In的方法是最干净的。我怎么做呢?

1 个答案:

答案 0 :(得分:0)

我在这里放了10个小时...这就是我想出的...... Piped Streams是我需要的

    int BUFFER = 4096;
    PipedOutputStream toAppPipedOutputStream;
    PipedInputStream toAppPipedInputStream;

    static BufferedReader fromAppBufferedReaderfinal;
    BufferedOutputStream fromAppOutputStream;
    PipedOutputStream fromAppPipedOutputStream;
    PipedInputStream fromAppPipedInputStream;

    /* constructor sets up logging and parameters */


           try { 
                fromAppPipedInputStream = new PipedInputStream(BUFFER);
                fromAppOutputStream=new BufferedOutputStream(new PipedOutputStream(fromAppPipedInputStream));
                fromAppBufferedReaderfinal=new BufferedReader(new InputStreamReader(fromAppPipedInputStream));
                CASUAL.Log.out = new PrintStream(fromAppOutputStream);

                toAppPipedInputStream = new PipedInputStream(BUFFER);
                toAppPipedOutputStream=new PipedOutputStream(toAppPipedInputStream);
                CASUAL.CASUALInteraction.in= new BufferedReader(new InputStreamReader(toAppPipedInputStream));

在我的日志和输出类中,默认情况下,我写入指向System.in的缓冲读写器。我可以劫持它,因为它是一个公共静态,这是可能的。现在我可以只读取和写入我的应用程序,就像它在我自己的应用程序中的命令行上运行一样