需要通过java运行批处理文件(.bat)的解决方案

时间:2014-08-09 15:34:01

标签: java tomcat batch-file

我有一个servlet,我试图在其中运行一个批处理文件 - run.bat

批处理文件用于打开文件文件,例如sample.txt放置在C:/Test/run.bat

等文件夹中

如果我在Eclipse中运行该程序,该程序正常工作,即文本文件正在打开。当我在位置C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps的tomcat wepapps文件夹中部署此应用程序时,文本文件也会打开,使用Tomcat作为服务,即安装Tomcat,我通过URL localhost:8080/testbatfile/StartTest访问应用程序。 / p>

testbatfile是项目名称,StartTest是servlet。

但是如果我试图通过浏览器运行应用程序,它就无法正常工作。该程序无法运行批处理文件。

但是如果我们在Tomcat中部署应用程序并运行Tomcat的startup.bat,那么一切也正常。

如果有人愿意接受这项挑战,请告诉我。

servlet的内容如下:

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws   ServletException, IOException {
    Runtime runtime = Runtime.getRuntime();
    Process p1 = runtime.exec("C:/CGT_TO_SAS/run.bat");

    InputStream is = p1.getInputStream();
    int i = 0;

    while( (i = is.read() ) != -1)
    {
        System.out.print((char)i);
    }
}

run.bat的内容只是:

"C:\Test\sample.txt"

1 个答案:

答案 0 :(得分:0)

您的批处理文件内容看起来已损坏,这不是有效的命令。为什么你需要一个bat文件来使用sample.txt做什么?

无论如何,您应该使用exec(String[] cmdarray, String[] envp, File dir)ProcessBuilder而不是基于普通字符串的exec。这允许您指定起始目录,一个理智的环境,尤其是您的操作系统无法解释的命令名称和参数。

runtime.exec(new String[]{"C:/CGT_TO_SAS/run.bat"}, null, new File("C:/CGT_TO_SAS"));

我怀疑你的案例中的问题是Tomcat安装路径中的空白。

相关问题