Оберните фильтр Linux в Java - PullRequest
       30

Оберните фильтр Linux в Java

1 голос
/ 09 ноября 2011

Я хочу написать тест JUnit, который гарантирует, что наша самореализуемая канонизация XML работает так же, как "xmllint --c14n".

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

Как я могу заполнить процесс тестовым файлом и получитьвывод для сравнения похож на unix pipe & filters?

1 Ответ

1 голос
/ 09 ноября 2011

Используя Java 7, вы можете использовать метод ProcessBuilder.redirectInput(java.io.File):

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

Используя Java 6, вам нужно будет сделать это самостоятельно с потоками ввода / вывода.

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.
...