我正在创建一个JAVA Web应用程序来在线判断代码。我正在使用用户上传的.java文件并将其存储在C:\ uploads中。然后使用ProcessBuilder类,我正在编译并执行服务器上的java文件。在执行时,我将JAVA程序的输出重定向到output.txt。 该程序编译得很好。但是发生的问题是在执行时,尽管创建了output.txt文件,但该文件为空。
以下是执行代码
public static boolean executeCode(int timeLimit,String fileName)
{
fileName=fileName.substring(0,fileName.length()-5); //to remove .java
String commands[]={"CMD", "/C","cd C:\\uploads && java"+fileName+">output.txt"};
ProcessBuilder p=new ProcessBuilder(commands);
p.redirectErrorStream(true);
Process process=null;
boolean errCode=false;
try {
long start=System.nanoTime();
process=p.start();
errCode=process.waitFor(timeLimit,TimeUnit.MILLISECONDS);
long end=System.nanoTime();
System.out.println("Duration="+(end-start));
} catch (IOException e) {
e.printStackTrace();
}
catch(InterruptedException e)
{
e.printStackTrace();
}
return errCode;
}
P.S。 - 当我创建一个JAVA程序来做同样的事情时,这个问题并没有发生。
答案 0 :(得分:1)
如果您正在使用jdk 1.7,那么您可以尝试这样的事情:
public static boolean executeCode(int timeLimit,String fileName)
{
String commands[]={"CMD", "/C","cd C:\\uploads && javac " + fileName};
ProcessBuilder p=new ProcessBuilder(commands);
p.redirectErrorStream(true);
File output = new File("C:\\uploads\\output.txt");
p.redirectOutput(output);
...
}
答案 1 :(得分:0)
我不是高级控制台/ bash用户,但是你不是缺少几个空格吗?这条线应该是这样的:
var resorts = '{ "skiResorts" : [' +
'{ "resortName":"Afton Alps" , "resortState":"Minnesota" },' +
'{ "resortName":"Alpine Way" , "resortState":"Pennsylvania" },' +
'{ "resortName":"Alyeska" , "resortState":"Alaska" } ]}';
var obj = JSON.parse(resorts);
function displaySkiResorts() {
//code
for (i = 0; i < obj.length; i++) {
document.getElementById("req8").innerHTML = obj.skiResorts[i].resortName + " " + obj.skiResorts[i].resortState;
}
}