package com.lst.lc.test.javaCompire;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import org.junit.Test;
public class ShellCmdTest {
public Object exec(String cmd) {
try {
String[] cmdA = { "/bin/sh", "-c", cmd };
Process process = Runtime.getRuntime().exec(cmdA);
LineNumberReader ibr = new LineNumberReader(new InputStreamReader(
process.getInputStream()));
StringBuffer isb = new StringBuffer();
String line;
while ((line = ibr.readLine()) != null) {
isb.append(line).append("\n");
}
LineNumberReader ebr = new LineNumberReader(new InputStreamReader(
process.getErrorStream()));
StringBuffer esb = new StringBuffer();
while ((line = ebr.readLine()) != null) {
esb.append(line).append("\n");
}
return isb.append(esb).toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public String compireJava(String source,String stdin,String name){
String ans;
if(stdin == null){
stdin = "";
}
if(name == null || source == null){
ans = "Please enter the correct code !!!";
return ans;
}
File pathFile = null;
FileOutputStream fileSource = null;
FileOutputStream fileStdin = null;
long Timefile = System.currentTimeMillis();
String cmd = "cd /tmp/LearningCommunity/Compire/"+Timefile+";javac "+name+".java;java "+name+"< "+name+".in";
String path = "/tmp/LearningCommunity/Compire/"+Timefile;
pathFile = new File(path);
if(!pathFile.exists()){
pathFile.mkdirs();
}
try{
fileSource = new FileOutputStream(path+"/"+name+".java");
fileStdin = new FileOutputStream(path+"/"+name+".in");
fileSource.write(source.getBytes());
fileStdin.write(stdin.getBytes());
}catch(IOException e){
}finally{
try {
fileStdin.close();
fileSource.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
ans = exec(cmd).toString();
deleteFile(pathFile);
return ans;
}
public void deleteFile(File file) {
File[] files = file.listFiles();
if (files != null)
for (File f : files)
deleteFile(f);
file.delete();
}
@Test
public void cmdTest() throws IOException {
String source = "import java.util.*;import java.lang.*;import java.io.*;class Main{public static void main (String[] args) throws java.lang.Exception{Scanner cin = new Scanner (new BufferedInputStream(System.in));int a,b;a = cin.nextInt();System.out.println(a);b = cin.nextInt();System.out.println(b);}}";
String stdin = "1 2";
String name = "Main";
String stdout = null;
stdout = compireJava(source, stdin, name);
System.out.println(stdout);
}
}