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

标签 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 访问应用程序。

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"

最佳答案

您的批处理文件内容看起来不完整,这不是一个有效的命令。为什么需要一个 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安装路径中的空白。

关于java - 通过java运行批处理文件(.bat)所需的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25220151/

相关文章:

java - 运行 GWT Map 时出错 - Maps key 是否丢失或无效?

java - Tomcat 7 到 war 文件的符号链接(symbolic link)

postgresql - 如何在 ubuntu 12.04 上从 tomcat 释放对应用程序的访问权限

windows - 如何禁止在批处理脚本中键入消息?

java - 使用 Math.ceil() 的问题

java - 如何在 HQL 中按列表大小选择对象?

Windows 批处理脚本 : Parse CSV file and extract data

windows - 在使用PowerShell的控制台中使用CMD脚本时,是否存在根本的不兼容性?

java - Arraylist 到 Array 的转换 - toArray() 函数推断类型不符合上限错误

java - HTTP 状态 404 -/spring-mvc/login