2011-11-09 54 views
1

我想寫一個JUnit測試,以確保我們的自我實現的XML規範化工作就像「xmllint --c14n」一樣工作。在java中包裝linux過濾器

ProcessBuilder pb = new ProcessBuilder("xmllint", "--c14n", "-"); 
    Process p = pb.start(); 

我怎麼能養活過程與測試文件,並得到類似UNIX管道&濾波器的輸出進行比較?

回答

1

使用Java 7,您可以使用ProcessBuilder.redirectInput(java.io.File)方法:

ProcessBuilder pb = new ProcessBuilder(...); 
pb.redirectInput("/path/to/testFile.txt"); 
Process p = pb.start(); 

使用Java 6,您需要自己與我做/ O流。

import org.apache.commons.io.IOUtils; 

FileInputStream testFile = ... 
OutputStream processInput = p.getOutputStream(); 
IOUtils.copy(testFile, processInput); 

InputStream processOutput = p.getInputStream(); 
// Either parse this, or IOUtils.copy it to a file and do a diff of some kind. 
+0

這是行不通的:OutputStream processInput = p.getInputStream(); – Bastl

+0

哎呀,對不起,我總是把這些方法名稱混合起來。它應該是'getOutputStream()'獲得'OutputStream'到進程的stdin。 – Bringer128

+0

啊,所以p.getOutputStream()是進程的輸入,而p.getInputStream是它的輸出?這是令人困惑的... – Bastl