2014-01-16 18 views
0

我有一個外部程序(裝在一個罐子裏)的情況下,我想從另一個Java程序,執行這一點我使用的Java的InputStream串在一個句子

Process proc = Runtime.getRuntime().exec(command) 

這個jar程序現在返回句子作爲輸出,我想在程序中稍後使用它,所以我想轉換它的輸出,爲此我使用關於使用IOUtils的建議,我找到了here

然而

InputStream in = proc.getInputStream(); 
String myString = IOUtils.toString(in, "UTF-8"); 

只返回句子的第一個字。是否有可能從輸入流中獲得完整的句子?

回答

1

如果可行,我會採取立即調用其他JAR主要方法的方法。 這不是孤立的,但您可以設置System.out來捕獲所有文本。

void startOtherApp(String[] args) { 
    final String ENCODING = "UTF-8"; 
    PrintStream oldOut = System.out; 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    try (PrintStream out = new PrintStream(baos, false, ENCODING)) { 
     System.setOut(out); 
     OtherJarsMain.main(args); 
     out.flush(); 
     System.setOut(oldOut); 
     String s = baos.toString(ENCODING); 
     System.out.println("OUTPUT:\n" + s); 
    } catch (UnsupportedEncodingException ex) { 
     Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); 
    } 
} 

要找到主類(這裏OtherJarsMain),用7zip的/ WinZip或因此打開罐子,並期待在/META-INF/MANIFEST.MF。那裏有一個"Main-Class: aa.bb.OtherJarsMain"的文本行。

+0

這是一個編譯的jar文件,所以我沒有權限訪問原始的java文件,以便知道原始主要方法需要什麼輸入。 – MaVe

+0

我用'java -jar ...'發現主類的方式擴展了我的答案。 –