2017-09-18 4 views
1

JavaFx에서 R 스크립트를 실행 해 봅니다. 이 목적으로 Renjin을 사용하고 있으며 내부적으로 실행하는 문과 올바르게 작동하는 것 같습니다. 하지만 외부 R 스크립트를 실행하고 싶습니다. 프로젝트는 Maven으로 설정되므로 R 스크립트가 resources 폴더에 있으므로 경로가 쉬워야합니다. 이 경로는 FXML 파일을로드 할 때 작동하므로 스크립트를 찾을 수없는 이유는 꽤 혼란 스럽습니다.FileReader가 R 스크립트를 찾을 수 없습니다.

package survey; 

import javax.script.*; 
import org.renjin.script.*; 
import java.io.FileReader; 

public class calcFunction { 

    public static void main(String[] args) throws Exception { 
    // create a script engine manager: 
    RenjinScriptEngineFactory factory = new RenjinScriptEngineFactory(); 
    // create a Renjin engine: 
    ScriptEngine engine = factory.getScriptEngine(); 

    engine.put("x", 4); 
    engine.put("y", 5); 

    engine.eval(new FileReader("/test.R")); 
    } 

} 

뭔가가 누락되었습니다

다음은 간단한 예제이다? 미리 감사드립니다!

EDIT1 :이 같은 "/"경로로 작동하는 내 FXML 파일로

:

root = FXMLLoader.load(getClass().getResource("/moduleDa.fxml")); 

EDIT2 :

engine.eval(new FileReader(new File(".").getAbsolutePath()+"/test.R")); 
: 자신의 의견이 제안 삭제

사람

스크립트가 pom.xml 파일이있는 루트 디렉토리에 있으면 작동합니다. @ James_D는 R 스크립트가 resources 폴더에있을 수 있도록 작동 시켰습니다. - 고마워요!

+1

경로가 잘못 되었기 때문입니다. 파일 시스템의 루트 경로 (''/'')에 R 스크립트가 있습니다. –

+0

@ Konrad Rudoph "/"를 입력하여 Maven 기반 프로젝트의 resources 폴더에 연결할 수 있다고 생각 했습니까? 내 FXML 파일과 잘 작동합니다 (EDIT 참조). – jeypeu

+1

@jeypeu getClass(). getResource ("/ ...")와 새 FileReader ("/ ...") 사이에는 차이가 있습니다. getResource()가 파일 시스템의 항아리와 새로운 FileReader를 찾고 있으면 새로운 FileReader (새로운 File (this.getClass(). getResource ("/ test.R"). toURI())); 하지만 더 잘해야합니다. – funfried

답변

1

R 스크립트가 응용 프로그램의 일부로 번들로 제공되는 경우 파일로 처리 할 수 ​​없으므로이를 리소스로 처리해야합니다. 일반적으로 응용 프로그램을 Jar 파일로 배포하면 해당 jar 파일 내의 요소가 리소스가됩니다 (자체적 인 파일이 아닙니다).

그래서 R 스크립트를 리소스로 취급하고 그대로로드하십시오. renjin 프레임 워크를 모르지만 ScriptEnginejavax.script.ScriptEngine이고,이 경우 ScriptEngine.eval(...)Reader을 매개 변수로 사용하므로 R 스크립트가 클래스 경로의 루트에있는 경우

을 수행 할 수 있습니다.
engine.eval(new InputStreamReader(getClass().getResourceAsStream("/test.R")));