当我从cmd重定向输出时,为什么我将输出文件视为空?

时间:2016-02-05 20:22:21

标签: java web-applications processbuilder

我正在创建一个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程序来做同样的事情时,这个问题并没有发生。

2 个答案:

答案 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;
    }
}