在IDE中执行Jar文件并获取输出(String)?

时间:2016-03-18 14:45:10

标签: java intellij-idea jar

是否可以在我的IDE(IntelliJ)上执行Jar文件,以便在我拥有的项目中获取我自己的输出字符串?

我知道我们可以进行系统调用,但在这种情况下,我想在项目中添加一个Jar文件,并在需要时执行它。

例如:我在IntelliJ上有一个项目,我的一个类(在这个项目上)需要通过运行Jar文件(在我的项目中)来获取输出。

在我的终端上,我会做类似java -jar <jar_file>.jar <file>.asm的事情,这会将结果输出到我的终端。 我希望从我的Java类中获得该命令的输出。

2 个答案:

答案 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

}

希望这能帮到你