public void destroy() {
        try {
            //the lines below do not work.... but don't know why.
            java.lang.Runtime.getRuntime().exec("del " + gv.CONTEXT_ROOT_TEMP + "/tmp*");
            java.lang.Runtime.getRuntime().exec("rm " + gv.CONTEXT_ROOT_TEMP + "/tmp*");
        } catch (Exception e) {
            //ignore
        }
    }请问大家这个getRuntime().exec为什么总是执行不了系统命令啊。java.lang.Runtime.getRuntime().exec("dir c:");直接这样也会抛异常。不知道什么原因啊。

解决方案 »

  1.   

    呵呵,我也碰到过,share一下,由于产生的输出流,错误流,需要自己去走,不然java线程会阻塞等待,详细可以见jdk api说明
    try {
    //需要清理subprocess的输入流,在服务器上大小有限制,容易引起process阻塞
    Process process = Runtime.getRuntime().exec("sh /backup/google/googlecount/count.sh");
    final InputStream is = process.getInputStream();
    new Thread(new Runnable() {
    public void run() {
         BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
         try {
    while(br.readLine() != null) ;
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }).start(); 

    final InputStream ise = process.getErrorStream();
    new Thread(new Runnable() {
    public void run() {
         BufferedReader br = new BufferedReader(new InputStreamReader(ise)); 
         try {
    while(br.readLine() != null) ;
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }).start(); 

    } catch(Exception e) {

    }
      

  2.   

    这样执行rt.exec("cmd /c  del d:\\1.txt");
    注意d:\\1.txt要使用双斜杠转义可测试代码如下,dir的是当前的代码运行路径
                  Runtime rt = Runtime.getRuntime();
                Process p = rt.exec("cmd /c  dir");
                InputStream o = p.getInputStream();
                BufferedReader in = new BufferedReader(new InputStreamReader(o));            String str = in.readLine();
                while(str !=null)
                {
                    System.out.println(str);
                    str = in.readLine();
                }