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

How to run a batch file inside Java package using Java code?

我需要 运行 一个已经在我的 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 class 也位于其中。下面是包结构。

我怎样才能做到这一点?

编辑

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

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 源代码文件夹中,否则我会将其移至项目的根目录,或者更好的是,创建一个 /resources 文件夹并将其放入那里。

然后您可以让 IDE 或构建系统将其复制到您的 bin/build。然后您现有的代码可以 运行 正确。