如何从另一个java程序中运行.jar文件?

如何从另一个java程序中运行.jar文件?,java,Java,我有一个.jar文件,可以在命令行上运行: java -jar myFile.jar argument1 我想将这个.jar的输出保存为另一个java程序中的字符串变量 我怎么做 我尝试在程序中包含myFile.jar作为引用,并在程序中执行myFile.main(新字符串{“argument1”})。但这只是将结果打印到控制台,我不能在我的程序中使用结果 希望这不会太混乱。作为一个Jar文件,您可以将其添加到类路径中,并自行调用程序的功能。您可能需要更多地了解Jar背后的逻辑,以便在不让它输

我有一个.jar文件,可以在命令行上运行:

java -jar myFile.jar argument1
我想将这个.jar的输出保存为另一个java程序中的字符串变量

我怎么做

我尝试在程序中包含myFile.jar作为引用,并在程序中执行
myFile.main(新字符串{“argument1”})
。但这只是将结果打印到控制台,我不能在我的程序中使用结果


希望这不会太混乱。

作为一个Jar文件,您可以将其添加到类路径中,并自行调用程序的功能。您可能需要更多地了解Jar背后的逻辑,以便在不让它输出信息的情况下使用它

我相信您正在寻找的是如何shell执行Jar归档。例如可以

I

运行Jar文件需要将Jar文件包含在类路径中。这可以在运行时使用
URLClassLoader
完成。只需构造一个
URLClassLoader
,将jar作为URL之一。然后调用它的
forClass(…)
如果你知道类名(当然是全名)。或使用其“findResources(字符串名称)”检查清单文件

一旦获得该类,就可以使用反射来获取其静态方法
main

再次看到您的问题,您知道类名,因此如果您确定jar文件已经在类路径中,那么您可以在尝试时调用它

二,

要捕获输出,可以调用
System.setOut(PrintStream out)
System.setErrPrintStream out)
来更改打印流。您可以传递创建的打印流。像这样:

ByteArrayOutputStream BAOS = new ByteArrayOutputStream();
PrintStream MyOut = new PrintStream(BAOS);
System.setOut(MyOut);

// Do something to have something printed out.
...

String TheCaptured = new String(BAOS.toByteArray());

希望这能有所帮助。

看看ProcessBuilder:

它有效地创建了一个操作系统进程,然后您可以使用以下方法捕获输出:

process.getInputStream()

该行:

processbuilder.redirectErrorStream(true)

将在以下示例中合并输出流和错误流:

e、 g


如果你不能包括另一个罐子

你可以用这样的东西

Runtime re = Runtime.getRuntime();
BufferedReader output;          
try{ 
  cmd = re.exec("java -jar MyFile.jar" + argument); 
  output =  new BufferedReader(new InputStreamReader(cmd.getInputStream()));
} catch (IOException ioe){
  ioe.printStackTrace();
}
String resultOutput = output.readLine();
我知道我的代码并不完美,比如捕捉异常等等,但我认为这可以给你一个好主意

Runtime re = Runtime.getRuntime();
BufferedReader output;          
try{ 
  cmd = re.exec("java -jar MyFile.jar" + argument); 
  output =  new BufferedReader(new InputStreamReader(cmd.getInputStream()));
} catch (IOException ioe){
  ioe.printStackTrace();
}
String resultOutput = output.readLine();