java - 如何使用 Java 代码运行 Java 包内的批处理文件?

标签 java batch-file command-line runtime.exec

我需要运行一个批处理文件,该文件已位于我的 Java 包中。下面是我的代码。

public class ScheduleTest {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {

       Process exec = Runtime.getRuntime().exec("test.bat");
    }

}

test.bat 位于 scheduletest 包内,ScheduleTest 类也位于其中。下面是包结构。

enter image description here

我怎样才能做到这一点?

编辑

这是我的批处理文件的内容

echo hello;
pause

最佳答案

通常,当您的 IDE 编译源代码时,test.bat 应放置在包含二进制文件的文件夹中,保留相同的包结构,例如bin/scheduletest/test.bat。假设如此,您可以使用类加载器加载批处理文件:

ClassLoader loader = ScheduleTest.class.getClassLoader();
URL resource = loader.getResource("scheduletest/test.bat");
Process exec = Runtime.getRuntime().exec(resource.getPath());

要读取进程的输出,您需要获取其输入流:

InputStream inputStream = exec.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
String line = null;
while((line = br.readLine()) != null) {
    System.out.println(line);
}

但是,最好为其提供一个资源目录,因为自动构建过程(例如 Ant 或 Maven)会在清理时删除该文件。

关于java - 如何使用 Java 代码运行 Java 包内的批处理文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30288678/

相关文章:

java - 长时间运行的 HTTP 请求和线程同步

java - 链式 java.lang.SQLException 实例与 Throwable#getCause

java - 使用 WebSocket 进行服务器与服务器通信

c# - 我应该在哪里存储在批处理运行结束时发出的电子邮件的电子邮件模板?

windows - 谁是使用 CFEXECUTE 调用的批处理文件创建的文件夹的所有者?

SVN - 仅显示版本化的本地文件(命令行)?

ruby - 我可以确定 RubyGems 将哪些路径添加到加载路径以使我的命令行应用程序正常工作吗?

android - MacOS 上的 Expo 可以通过 XDE 通过 USB 电缆在我的 Android 设备上打开我的应用程序,但不能通过命令行

java - 将 String.endsWith(..) 与正则表达式等效项进行比较

windows - 有没有更好的方法来查找用户的开始菜单?