rendered paste bodyimport java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Random;
public class NativeLauncher {
public static void main(String[] args) {
if(args.length != 4){
System.out.println("Error : Wrong number of inputs");
return;
}
System.out.println("Arguements are...");
int len = ((Integer)args.length).toString().length();
String format = "%0" + len + "d / %0" + len + "d";
for(int i = 0 ; i < args.length ; i++){
System.out.printf(format + " : %s\n",i,args.length - 1,args[i]);
}
execute(args[0],args[1],args[2],args[3]);
}
static void execute(String program, String inputFile, String outputFile, String errorFile){
ProcessBuilder pb = new ProcessBuilder(program);
Process p;
try{
p = pb.start();
p.getOutputStream();
BufferedReader fin = new BufferedReader(new FileReader(inputFile));
BufferedWriter fout = new BufferedWriter(new FileWriter(outputFile));
BufferedWriter ferror = new BufferedWriter(new FileWriter(errorFile));
BufferedReader pout = new BufferedReader(new InputStreamReader (p.getInputStream ()));
BufferedReader perror = new BufferedReader(new InputStreamReader (p.getErrorStream ()));
BufferedWriter pin = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
System.out.println("DIRECTORY : " + System.getProperty("user.dir"));
new IOMapper(fin,pin).start();
new IOMapper(pout,fout).start();
new IOMapper(perror,ferror).start();
p.waitFor();
}catch (Exception ex){
ex.printStackTrace();
};
}
}
class IOMapper extends Thread{
private BufferedReader br;
private BufferedWriter bw;
public IOMapper(BufferedReader br, BufferedWriter bw){
this.br = br;
this.bw = bw;
}
public void run(){
int i;
try{
while((i = br.read()) != -1){
bw.write(i);
//System.out.print((char)i);
//sleep(Math.abs(new Random().nextInt() % 10));
}
bw.close(); // close() has an implicit flush
}catch (Exception ex){
ex.printStackTrace();
};
}
}