For some reason whenever I execute Graphviz dot
using Java’s Runtime.getRuntime().exec() in two different ways (one echoing the input, one passing in the filename) – only echoing works.
For eg. this doesn’t work (produces 0 bytes)
Runtime.getRuntime().exec(new String[]{"bash", "-c", "dot -Tsvg FILE_NAME.dot"});
But this does:
Runtime.getRuntime().exec(new String[]{"bash", "-c", "echo 'digraph { A -> B }' | dot -Tsvg"});
here is the rest of my code:
Process process = Runtime.getRuntime().exec(new String[]{"bash", "-c", "echo 'digraph { A -> B }' | dot -Tsvg"});
InputStream inputStream = process.getInputStream();
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
OutputStream outputStream = new FileOutputStream("out.txt");
byte[] buffer = new byte[8 * 1024];
int bytesRead;
while ((bytesRead = bufferedInputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
IOUtils.closeQuietly(bufferedInputStream);
IOUtils.closeQuietly(outputStream);