Re: I/O with external command
Uzytkownik "Michele" <michele@nectarine.it> napisal w wiadomosci
news:48bd427c$0$41651$4fafbaef@reader4.news.tin.it...
Hi,
I'm trying to run an external command inside my Java program and then
manage the I/O with that program with the console.
I paste the code
[...]
I can run the external command (I see the output). However, when I have
to insert some input and then press Enter, the external command doesn't
get what I write and it's stuck waiting for input.
Any ideas?
Thanks
I've write first program which is test one:
import java.io.IOException;
public class InputReader {
public static void main(String[] args) throws IOException {
int value;
System.out.println("TEST STRING");
System.out.flush();
do {
value = System.in.read();
System.out.println((char) value);
System.out.flush();
} while ((value != 10) && (value != 13) && (value != -1));
}
}
-------------------------------------
And here is second one which runs the InputReader and writes read data back
to it.
Maybe it helps you to solve the problem:
-------------------------------------
import java.io.BufferedInputStream;
import java.io.InputStream;
import java.io.BufferedOutputStream;
import java.io.OutputStream;
import java.io.IOException;
public class ProcessBuilderTest {
static class StreamReader {
private InputStream stream;
private OutputStream outStream;
public StreamReader(InputStream stream, OutputStream outStream) {
this.stream = new BufferedInputStream(stream);
this.outStream = new BufferedOutputStream(outStream);
}
public void redirectToOutput() throws IOException {
int value;
do {
value = stream.read();
outStream.write((char) value);
System.out.print((char) value + ".");
} while ((value != -1) && (value != 10) && (value != 13));
outStream.flush();
while ((value = stream.read()) != -1) {
System.out.print((char) value);
}
}
}
public static void main(String[] args) throws IOException,
InterruptedException {
final ProcessBuilder processRunner = new ProcessBuilder("java.exe",
"InputReader");
final Process p = processRunner.start();
final StreamReader sout = new StreamReader(p.getInputStream(),
p.getOutputStream());
sout.redirectToOutput();
p.waitFor();
}
}
Best regards,
Przemek