2012-08-07 108 views
0

我有一个调用R脚本的java程序。 下面是一个命令:从java jar中运行R脚本

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(); 
    } 

我想包括读剧本“hierarchicalClusteringScript.R”成jar文件。如果我确实有办法从代码调用脚本?我应该使用哪条路径?

感谢很多提前

+0

是“R”能够从压缩文件执行脚本? – MadProgrammer 2012-08-07 06:09:49

+0

我不知道...我想知道如果这是可能的,或者如果我需要把文件放在另一个地方 – Rossella 2012-08-07 09:07:42

+0

嗯,我建议你可能会遇到问题,你怎么解压缩脚本从Jar文件@运行时转换为临时位置并从那里执行 – MadProgrammer 2012-08-07 09:09:08

回答

1

为了从JAR中提取脚本,通常我们很少执行JAR/ZIP提取。将脚本放在JAR中时,通常意味着它位于类路径中。因此,只需将其定位为资源,获取inputStream,然后读取资源并将其写入临时目录。这几个步骤应该很容易,您可以轻松地从网络中轻松找到代码示例。

一些提示您:

Class#getResourceAsStream() 
FileOutputStream 
File#createTempFile() 
+0

完美的工作......非常感谢! – Rossella 2012-08-10 11:37:07

0

如果我理解您正在寻找将R脚本添加到jar并将R作为来自jar classpath的资源加载。 (JAR可以包含任何类型的文件,但JVM只能运行什么是字节码兼容)

- 要添加脚本到现有的罐子这样做:
http://docs.oracle.com/javase/tutorial/deployment/jar/update.html

- 要创建脚本新的jar做到这一点:
http://docs.oracle.com/javase/tutorial/deployment/jar/build.html

- 要加载从罐子脚本确保它是在类路径和您的代码加载它的ResourceLoader:
http://docs.oracle.com/javase/1.5.0/docs/guide/lang/resources.html