从R运行jar时rJava NoSuchFileException

时间:2017-09-30 14:22:16

标签: java r path rjava nosuchfileexception

我正在尝试使用rJava包从R运行可运行的JAR文件。这个jar必须向/从外部文件夹写入和读取一些文件,这些文件与jar文件本身在同一路径中,如下所示:

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

如果我通过打开“mypath”中的控制台并以下列方式运行jar来调用它,程序运行正常:

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

但是当我尝试在R中使用rJava运行此代码时,代码在某些时候崩溃,因为它找不到mypath / folder1和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中的文件夹(例如folder1和folder2)时崩溃了错误:

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

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

1 个答案:

答案 0 :(得分: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)