2012-08-07 149 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