【问题标题】:How run a jar file which contains a call to a batch file?如何运行包含对批处理文件的调用的 jar 文件?
【发布时间】:2015-07-31 09:10:22
【问题描述】:

我制作了一个 java 应用程序,它有时应该调用批处理文件以便将视频从一个文件夹移动到另一个文件夹。批处理文件在项目主类的同一目录下(ProjectName\src\move.bat)。

我通过指令得到了批处理文件的路径:

String pathMoveBat = new java.io.File("src\\move.bat").getAbsolutePath();

我使用下面的代码(通过按下应用程序中的按钮调用)来调用该文件:

Process move = Runtime.getRuntime().exec(pathMoveBat+" "+username+" "+dateFormat.format(currentDate)+" "+i+"");

基本上,当我单击按钮时,什么也没有发生,而且 Windows 似乎找不到文件 move.bat。

还有其他方法可以从 jar 中调用该文件吗?

【问题讨论】:

标签: java batch-file jar cmd windows-7-x64


【解决方案1】:

在使用它之前,您需要了解一些要点

  1. 为了执行批处理文件,您需要一个外部程序,例如命令提示符 (cmd)。
  2. 您需要知道批处理文件的位置。在您的情况下,您将其放置在 src 文件夹下,当您生成 jar 时该文件夹不可用。由于 src 是源文件夹,因此应将批处理复制到 bin/dist/classes 文件夹(根据 IDE 或项目设置输出)。
  3. 使用运行时执行进程时,请确保提供用空格分隔的相关参数。在这里,您将传递用户名和当前日期以及 i。
  4. 使用 Runtime.exec 执行批处理文件后,如果成功执行,则获取 Process.getInputStream 以捕获输出。您还需要 Process.getErrorStream 来检查执行批处理文件时是否有任何错误。
  5. 最后但同样重要的是关闭流,Process.getInputStream().close(); Process.getOutputStream().close(); Process.getErrorStream().close();

Runtime.getRuntime().exec("cmd /c move.bat "+username+" "+dateFormat.format(currentDate)+" "+i+"");

如果可以的话,切换到 ProcessBuilder 会更好:https://stackoverflow.com/a/10723391/1129313

【讨论】:

    猜你喜欢
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 2018-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多