2016-07-22 93 views
0

該方案如下 - 我有一個主java文件file1和一個jar文件調用Minimize。我創建了一個名爲MinimizeTableclassobject,它在jar中定義。現在,這個對象的創建會導致一些行被打印到jar中定義的stdout。我只想重定向這個輸出。除此之外,我的主文件有許多stdout行,必須將它們打印到stdout本身。無論如何只能重定向jar文件打印的內容,而不是其他內容? 我已經定義了下面的情況 -在java中重定向jar文件的stdout

class file1{ 
    public static void main(String[] args) 
    { 
     MinimizedTable M = new MinimizedTable(); //this instantly prints stuff out which I want to be redirected and not printed to stdout. 
     System.out.println("Hello"); //This line must be printed to stdout. 
    } 
    } 

是否有這樣做不接觸的jar文件的方法嗎?希望我的解釋有道理。

+1

您能否給一些洞察到其中'MinimizeTable'是什麼?它位於專有的JAR文件中嗎?它識別「log4j」嗎?如果是這樣,你可以通過Sundaraj評論達到你想要的。 – Carlos

回答

0

您可以Log4j的,類似於這樣實現它...

log4j.logger.abc.xyz.MinimizedTable=OFF 

純Java的解決方案,請參閱該SO question

0

無需任何外部的依賴,並與主要的輕微修改:

System.setOut(new FilteredOutput(System.out)); 

    MinimizedTable M = new MinimizedTable(); 

    System.out.println("Hello"); 

然後FilteredOutput是這樣的:

import java.io.OutputStream; 
import java.io.PrintStream; 


public class FilteredOutput extends PrintStream { 

    public FilteredOutput(OutputStream out) { 
     super(out); 
    } 

    @Override 
    public void println(String x) { 

     if (Thread.currentThread().getStackTrace()[2].getClassName().equals(MinimizedTable.class.getName())) { 

      super.println("From MinimizedTable: "+x); 

     } else { 

     super.println(x); 

     } 
    } 

    ... 

}