2017-09-30 71 views
1

我试图从R运行使用rJava软件包的可运行JAR文件。这个罐子有写入和读取一些文件到/从外部文件夹,这是在为JAR文件本身相同的路径,像这样:从R运行jar时rJava NoSuchFileException

mypath/myjar.jar 
mypath/folder1 
mypath/folder2 
mypath/input_file1.txt 
mypath/input_file2.txt 

程序工作正常,如果我在打开一个控制台叫它“mypath中”运行罐子方式如下:

java -jar myjar.jar input_file1.txt input_file2.txt false 

但是当我尝试运行在读该代码,使用rJava,代码崩溃在某些时候,因为它不能找到既mypath中/资料夹,也不mypath/folder2,即使工作目录被正确定义为“mypath”。

jinit(".",force.init=TRUE) # this starts the JVM 
.jaddClassPath("myjar.jar") 
jobject <- .jnew("package_name/Main") ## call the constructor 

result_java <- rJava::.jcall(obj = jobject, returnSig = "V", method = "main", c("input_file1.txt","input_file2.txt","false")) 

事实上,Java程序被调用,它是能够真正找到输入文件,这也是mypath中,但由于某种原因崩溃时,它尝试写入文件夹mypath中(如文件夹1和文件夹2)与错误:

Error executing task java.nio.file.NoSuchFileException: folder1/some_file.txt 

我真的不知道发生了什么事,花了几个小时这一点。我在这里错过了非常明显的东西吗?

回答

0

当您使用Java运行代码时,您位于mypath之内,并且您的代码可以看到folder1folder2的位置。

也许,你应该传递(作为参数)目录的位置,而不是访问你的Java代码中的folder1,你应该访问显式路径。

result_java <- 
    rJava::.jcall(
    obj = jobject, 
    returnSig = "V", 
    method = "main", 
     c( 
     "input_file1.txt", 
     "input_file2.txt", 
     "false", 
     "full_path_to_your_mypath_location")) 

然后,里面main,你可以简单地打开full_path_to_your_mypath_location/some_file.txt。当你启动R时,你可能不再在你的代码的目录中。您也可以尝试更改目录

setwd(full_path_to_your_mypath_location)