1

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

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

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

4

1 回答 1

0

我为此投入了 10 个小时的坚实时间……这就是我想出的……管道流是我需要的

    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 的缓冲读取器/写入器。我可以劫持它,因为它是一个公共静态,这是可能的。现在我可以读取和写入我的应用程序,就好像它在我自己的应用程序内的命令行上运行一样

于 2013-04-23T02:52:20.777 回答