当前位置: 首页 > 面试题库 >

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

堵浩波
2023-03-14
问题内容

在我正在处理的项目中,我需要执行资源文件夹(位于类路径中)中的脚本。我只是在测试最终的脚本功能,因为我在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");

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

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

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


问题答案:

使用由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()返回连接到子流程正常输出的输入流。



 类似资料:
  • 问题内容: 此代码将执行一个外部exe应用程序。 如果我想执行外部Java文件怎么办?可能吗?例如以下命令: 该代码在java和cmd提示符下不起作用。如何解决呢? 问题答案: 首先,您的命令行看起来不正确。执行命令与批处理文件不同,它不会执行一系列命令,而只会执行一个命令。 从外观上看,您正在尝试更改要执行的命令的工作目录。一个更简单的解决方案是使用,它将允许您指定给定命令的起始目录… 例如…

  • 问题内容: 仅当数据库名称包含(新数据库(myid)等)时,我才能读取文件。我给出以下示例代码: 假设我的数据库名称de mo是指我在打印行时得到的数据库名称仅是de。数据库名称带有空白时可以吗? 问题答案: 您熟悉双引号错误吗?(用于或) 你可以试试: 只需确保您不必传递的任何参数都包含双引号( 而不 是以双引号开头) (请参见 错误6511002 ) 任何类似的参数: 将在 内部 (通过实现)

  • 问题内容: 我只想从特定文件夹执行文件。就我而言/ data / data / my-package / files /。所以我试着: 没用 谁能告诉我正确的做法。谢谢 问题答案: 应该可以使用以下命令在特定的工作目录下调用可执行文件: 如下: 也许没有完整的途径 而不是硬编码,该路径也应该起作用,并且比您自己指定路径更安全/更干净,因为不能保证该 路径始终是所有设备的正确路径。 问题在于目录已针

  • 我有一些Java(swing)代码调用。如果我从命令行运行它,程序运行得非常好。

  • 问题内容: 我正在执行一个命令,该命令向我返回文件的修订号;’文档名称’。但是,如果执行命令时遇到问题,则应用程序将挂断。我该怎么做才能避免这种情况?请在下面找到我的代码。 问题答案: 我想问题是您只在读取InputStream而没有在读取ErrorStream。您还必须注意并行读取两个流。可能发生这种情况,当前从输出流中管道传输的数据已填满OS缓冲区,您的exec命令将自动挂起,以使您的阅读器有

  • 问题内容: 我有一个程序Test.java: 应该将HelloWorld1和HelloWorld2打印到文件text.txt中。但是,当我查看文件时,只能看到HelloWorld1。 HelloWorld2去了哪里?它消失在稀薄的空气中了吗? 可以说我也想将HelloWorld2重定向到test.txt。我不能仅在命令中添加“ >> test.txt”,因为会出现文件已打开错误。那么我该怎么做呢?