2013-04-21 13 views
1

我需要重新格式化Java應用程序的命令行日誌記錄,而不必觸摸原始應用程序。我有所有的代碼,所以我已經導入到我的項目中。我想要做的是找出一種方法來創建一個新的Process()或Thread(),並將該線程中的STDOUT和STDIN重定向到BufferedReader和BufferedWriter。用重定向輸入創建一個類

我想做一個包裝,將啓動一個新的進程(MyApp.Main(args))。我只是不知道該怎麼做,因爲它在罐子裏。 ProcessBuilder想要啓動一個文件。有什麼辦法可以將System.In和System.Out從線程中分離出來嗎?

我認爲找出一種方法來啓動一個線程並從中獲取System.Out/System.In是最清潔的。我該怎麼做?

回答

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的緩衝讀寫器中。我可以讓它陷入困境,因爲它是一個公共靜態,這是可能的。現在我可以讀寫我的應用程序,就好像它在我自己的應用程序的命令行上運行一樣

+0

這裏有代碼缺失 - 你可以填寫剩下的代碼嗎? – CJxD 2013-12-11 12:51:45

+0

@CJxD你是什麼意思?就是這個。 CASUAL.Log.out是System.out的引用,我的程序通常用它來通信,而CASUAL.CASUALInteractionl.in是對System.in的引用。這劫持了這些引用並將它們重定向到另一個應用程序。通過替換它們,可以對System.in和System.out執行相同的操作。 – AdamOutler 2013-12-17 13:48:23