是否可以在我的IDE(IntelliJ)上执行Jar文件,以便在我拥有的项目中获取我自己的输出字符串?
我知道我们可以进行系统调用,但在这种情况下,我想在项目中添加一个Jar文件,并在需要时执行它。
例如:我在IntelliJ上有一个项目,我的一个类(在这个项目上)需要通过运行Jar文件(在我的项目中)来获取输出。
在我的终端上,我会做类似java -jar <jar_file>.jar <file>.asm
的事情,这会将结果输出到我的终端。
我希望从我的Java类中获得该命令的输出。
答案 0 :(得分:2)
你的Jar文件返回一个输出字符串,所以我假设它的main方法看起来像:
public static void main(String[] args) {
System.out.println("output string");
}
现在,如果你想在你自己的类中使用这个“输出字符串”字符串,你可以这样做:
public class YourClass {
...
public String getOutputStringFromJar() {
String s = ""; // or = null;
try {
Process p = Runtime.getRuntime().exec("java -jar full/path/to/your/Jar.jar full/path/to/fibonacci.asm");// just like you would do it on your terminal
p.waitFor();
InputStream is = p.getInputStream();
byte b[] = new byte[is.available()];
is.read(b, 0, b.length); // probably try b.length-1 or -2 to remove "new-line(s)"
s = new String(b);
} catch (Exception ex) {
ex.printStackTrace();
}
return s;
}
...
}
现在你有了返回输出字符串的方法,你可以根据需要使用它,并且知道如何随时从项目中执行Jar文件
答案 1 :(得分:0)
你的问题不准确,但是如果我理解你在做什么,你在param中运行带有.asm文件的Mars.jar,你得到的输出就像this link with Fibonacci numbers
现在你想在你的程序中获得斐波那契数字?如果那就是你需要的,我建议你反编译jar来理解他的内容
当你这样做时,你会发现jar中的主要类是这样的
public class Mars {
public static void main(String[] args) {
new mars.MarsLaunch(args);
}
}
所以简单地当你将jar添加到类路径时,你需要做这样的事情
public static void main(String[] args) throws FileNotFoundException {
// this will redirect your system output to a file named output.txt
PrintStream out = new PrintStream(new FileOutputStream("output.txt"));
System.setOut(out);
String [] myAsmFile = {"C:/produits/Fibonacci.asm"};
new mars.MarsLaunch(myAsmFile);
// and then you can read the output.txt file
}
希望这能帮到你