从javajar运行R脚本

从javajar运行R脚本,java,jar,external-process,Java,Jar,External Process,我有一个调用R脚本的java程序。 命令如下: String filename = "hierarchicalClusteringScript.R"; String[] cmd=new String[]{this.conn.getRPath(),"CMD","BATCH", "--args LD_matrix='"+LD_matrix+"' " + "image_filename='"+image_filename+"' " +

我有一个调用R脚本的java程序。 命令如下:

String filename = "hierarchicalClusteringScript.R";
String[] cmd=new String[]{this.conn.getRPath(),"CMD","BATCH",
            "--args LD_matrix='"+LD_matrix+"' " +
            "image_filename='"+image_filename+"' " +
            "width="+300+" "+
            "height="+height+" "+
            "ordered_snps_filename='"+ordered_snps_filename+"'",
            filename,
               this.conn.getWorkingDir()+this.conn.getProjectName()+"Routput.txt"};
    Runtime runtime = Runtime.getRuntime();
    try {
        Process process = runtime.exec(cmd);
        process.waitFor();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
我想将R脚本“HierarchycalClusteringScript.R”包含到jar文件中。如果我这样做了,有没有办法从代码中调用脚本?我应该走哪条路


提前多谢了

Jar文件本质上是Zip文件(带有清单)

您可以使用

基本上,您需要打开
JarFile
,找到
JarEntry
,并使用
JarOutputStream
提取内容


如果我了解到您希望将R脚本添加到jar并从jar类路径将R作为资源加载,那么您可以查看一个示例。 (jar可以包含任何类型的文件,但JVM只能运行字节码兼容的文件)

--要将脚本添加到现有jar,请执行以下操作:

--要使用脚本创建新jar,请执行以下操作:

--要从jar加载脚本,请确保它位于类路径中,并在代码中使用ResourceLoader加载它:

为了从JAR中提取脚本,通常我们很少执行JAR/ZIP提取。当您将脚本放入JAR时,它通常意味着它在您的类路径中。因此,只需将其定位为一个资源,获取输入流,读取资源并将其写入临时目录。这几个步骤应该足够简单,您可以很容易地从网上找到代码样本

给你一些提示:

Class#getResourceAsStream()
FileOutputStream
File#createTempFile()

“R”能够从压缩文件执行脚本吗?我不知道…我想知道这是否可能,或者我是否需要将文件放在另一个地方好吧,我建议您可能会遇到问题,无论如何,您可以将脚本从Jar文件@runtime提取到temp位置,然后从那里执行。您可以告诉我在Java中执行该操作所需的命令吗?提前多谢