尝试使用Runtime.getRuntime()。exec()执行Java jar

发布于 2021-01-30 16:49:05

在我正在处理的项目中,我需要执行资源文件夹(位于类路径中)中的脚本。我只是在测试最终的脚本功能,因为我在Windows上,所以我需要一种将文件输出到STDIN的方法,因此我创建了一个简单的cat.jar程序来克隆unixs
cat命令。

因此,当我执行“ java -jar cat.jar someFile.txt”时,它将输出文件到stdout。我敢肯定,我做的事情有不同的方式。

无论如何,我想从主Java程序运行该JAR。我在做

Runtime.getRuntime().exec("java -jar C:/cat.jar C:/test.txt");

我尝试过将正斜杠切换为反斜杠并转义了-没有用。什么都没有发送到标准输出。

在哪里,如果我自己运行猫罐,我会将文件定向到标准输出。

我在这里做错了什么?这是足够的信息吗?

关注者
0
被浏览
97
1 个回答
  • 面试哥
    面试哥 2021-01-30
    为面试而生,有面试问题,就找面试哥。

    使用由Process返回的实例exec()

    Process cat = Runtime.getRuntime().exec("java -jar C:/cat.jar C:/test.txt");
    BufferedInputStream catOutput= new BufferedInputStream(cat.getInputStream());
    int read = 0;
    byte[] output = new byte[1024];
    while ((read = catOutput.read(output)) != -1) {
        System.out.println(output[read]);
    }
    

    参考:http :
    //docs.oracle.com/javase/7/docs/api/java/lang/Process.html

    默认情况下,创建的子进程没有自己的终端或控制台。其所有标准I /
    O(stdin,stdout,stderr)操作都将重定向到父进程,在该父进程中,可以通过使用方法getOutputStream(),getInputStream()和getErrorStream()获得的流来访问它们。

    http://docs.oracle.com/javase/7/docs/api/java/lang/Process.html#getInputStream()

    getInputStream()返回连接到子流程正常输出的输入流。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看