如何从java执行批处理文件?

新手上路,请多包涵

我想从 java 程序执行一个批处理文件。

我正在使用以下命令。

 Runtime.getRuntime().exec("server.bat");

但问题是我想给出一个相对路径而不是绝对路径,这样我就可以在任何组件上部署该 java 项目。

项目的目录结构如下:

 com
   |
  project
   |
   ------ parser
   |         |_____ Main.java
   |
   -------util
             |_____ Server.bat

我想从“parser”目录中的“Main.java”文件运行“util”目录中的“Server.bat”文件。

原文由 Amit 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 534
2 个回答

当 Java 正在运行并且您使用带有相对路径的 Runtime.exec() 时,相对意味着相对于调用 JVM 的当前用户目录。

这可能有效

Runtime.getRuntime().exec("cmd.exe", "/c", "./com/projct/util/server.bat");

如果你从 com 的父目录启动 java。

或者你必须计算一个绝对路径:

 Runtime.getRuntime().exec("cmd.exe", "/c",
System.getProperty("user.dir")+"/com/projct/util/server.bat");

我忘记了,请阅读 When Runtime.exec() won’t

原文由 PeterMmm 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以为此使用 ProcessBuilder 。它比 exec 提供更多的控制。特别是,它允许使用方法 directory 设置工作目录。

例子:

 ProcessBuilder pb = new ProcessBuilder("server.bat");
pb.directory(new File(deployDir + "\\com\\project\\util"));
Process p = pb.start();
int exitStatus = p.waitFor();

当然,您的应用程序必须从某个地方获取 deployDir。它可以在环境中设置,在应用程序配置文件中,它可以是当前用户目录或其他任何东西。

原文由 Rorick 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题